小弟以前一直都是用DELPHI的,刚转到C#下,有一个问题想请教一下各位大虾,希望指点一下。是这样的,我在一个类中定义了一个 private arraylist list = new arraylist () 成员,然后加载页面的时候填充了list, 然后在一个方法中调用到了 list, 奇怪的是,程序每次调用到list时 都会执行
“private arraylist list = new arraylist () ” 语句,这真的把我弄糊涂了。如果是这样,那么list的值岂不永远为空????
请各位大虾详细说一下。其实我要实现的功能很简单的,就是定义一个类级的变量,在类的各个方法中都可以调用这个变量,请问应该怎么样实现?
写在方法里面,应该写到变量定义上面
————————————————————————————
http://www.81M.Net网络程序学习网,内含大量技术文章,代码下载,欢迎到访
public ArrayList List
{
get{if(list == null)list = new ArrayList(); return list;}
}
private ArrayList list ;
public ArrayList List
{
get{if(list == null)list = new ArrayList(); return list;}
}
==================================
这样当然不行了
public ArrayList List应该掉了()吧
这是一个构造函数
它在类初始化的时候都会被运行
而Web的页面刷新的时候所有的变量都会被清空
如果你的对ArrayList list 的实例化是在Page_Load事件中
并没有加回传的那个判断的话
那么无疑只要页面一刷新ArrayList list 就会被实例化
从而执行它的构造函数
我是的在类的成员中定义:“private arraylist list = new arraylist () ” 的 ,可是我每次调用 list 时 ,程序都会执行该创建语句,以致我的list 总是空的。我不明白为什么会这样的啊。在DELPHI中,这种写法是很正常的啊。
判断postback,在page_load里初始化arraylist
不好意思,我以为这里谈论的不是Asp.net而是Winform如Asp.net 我不知道系统会不会将ArrayList 类型序列化后保存,如果会则最好,如果不会
最好是这样
public ArrayList List
{
get{
object o = ViewState["list"];
if(o == null){ o = new ArrayList(); ViewState["list"] = o;}
return (ArrayList) o;
}
set
{
if(!(value is ArrayList)) throw new ApplicationException("invalid value !");
ViewState["list"] = value;
}}
这是一个属性(Attribute),不是一个方法(method)。所以不需要()
你应该把它保存到Viewstate中
程序如所下所示,请各位大虾为我解答一下。 public class VideoAndQuestion : System.Web.UI.Page
{
private static ArrayList alist ; private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if (!IsPostBack)
alist = new ArrayList();
}
public void kk()
{
在这个方法中,对alist赋了值
}
private void Button1_Click(object sender, System.EventArgs e)
{ //按钮单击事件
int i =alist.count //在上面的KK方法中已对alist赋 //值了,但执行到这里的时候alist已为空。可能是单击 // 时页面已刷新的原因。
}
}
我想将KK方法中对alist赋的值用到按钮单击事件中,但是,每次执行到单击事件时alist都已为空了(执行按钮单击前已执行KK方法了。)
请问我应该怎么样处理???? 谢谢!!!!!!
我想的就是+一个static
!!!!!!!!!!!!!!!!!!!!!!!!!!!!
public ArrayList List
{
get{
object o = ViewState["list"];
if(o == null){ o = new ArrayList(); ViewState["list"] = o;}
return (ArrayList) o;
}
set
{
if(!(value is ArrayList)) throw new ApplicationException("invalid value !");
ViewState["list"] = value;
}}
你这个东西为什么要Static?
Static 和Application对像基本上是等效的
它是保存在服务器的内存中
eg:
static ArrayList arrList;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(Page.IsPostBack)return;
AddData();
}
void AddData()
{
if(arrList == null)
{
arrList = new ArrayList();
}
arrList.Add("11");
arrList.Add("22");
}
private void Button1_Click(object sender, System.EventArgs e)
{
for(int i =0 ;i <arrList.Count ; i++)
{
Response.Write(arrList[i]);
}
}result : 1122
{
if (!IsPostBack)
ArrayList alist = new ArrayList();
}
{
if (!IsPostBack)
ArrayList alist = new ArrayList();
}
应该是把static ArrayList arrList;放在if (IsPostBack)里面吧