小弟以前一直都是用DELPHI的,刚转到C#下,有一个问题想请教一下各位大虾,希望指点一下。是这样的,我在一个类中定义了一个 private arraylist list = new arraylist () 成员,然后加载页面的时候填充了list, 然后在一个方法中调用到了 list,  奇怪的是,程序每次调用到list时 都会执行 
  “private arraylist list = new arraylist () ” 语句,这真的把我弄糊涂了。如果是这样,那么list的值岂不永远为空????
请各位大虾详细说一下。其实我要实现的功能很简单的,就是定义一个类级的变量,在类的各个方法中都可以调用这个变量,请问应该怎么样实现?

解决方案 »

  1.   

    定义一个static的全局变量你别把private arraylist list = new arraylist ()
    写在方法里面,应该写到变量定义上面
      

  2.   

    友情UP一下吧
    ————————————————————————————
    http://www.81M.Net网络程序学习网,内含大量技术文章,代码下载,欢迎到访
      

  3.   

    private ArrayList list ;
    public ArrayList List
    {
        get{if(list == null)list = new ArrayList(); return list;}
    }
      

  4.   

    回复人: zyug(LovlyPuppy) ( ) 信誉:100  2005-08-10 17:52:00  得分: 0  
     
     
       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 就会被实例化
    从而执行它的构造函数
      

  5.   

    Tony_lau111082(刘寓)兄弟,
     我是的在类的成员中定义:“private arraylist list = new arraylist () ” 的 ,可是我每次调用 list 时 ,程序都会执行该创建语句,以致我的list 总是空的。我不明白为什么会这样的啊。在DELPHI中,这种写法是很正常的啊。
      

  6.   

    我知道是什么原因了,原来是我点了按钮以后,页面刷新了,页面刷新后,list就重新创建了,害得我想了半天。哎。再问一下,我要点击按钮时不刷新页面,又可以执行我的点击事件的代码行不行?如果不行的话,我的list岂不是永远是空的了?
      

  7.   

    WebForm?
    判断postback,在page_load里初始化arraylist
      

  8.   

    你在类的构造函数里面填充list不就可以了
      

  9.   

    conan1211(柯楠)
    不好意思,我以为这里谈论的不是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;
          }}
      

  10.   

    public ArrayList List应该掉了()吧======
    这是一个属性(Attribute),不是一个方法(method)。所以不需要()
      

  11.   

    我知道是什么原因了,原来是我点了按钮以后,页面刷新了,页面刷新后,list就重新创建了,害得我想了半天。哎。再问一下,我要点击按钮时不刷新页面,又可以执行我的点击事件的代码行不行?如果不行的话,我的list岂不是永远是空的了?
      

  12.   

    是页面重建,没有处理你的这个字段,因此它是空的
    你应该把它保存到Viewstate中
      

  13.   

    我知道是什么原因了,原来是我点了按钮以后,页面刷新了,页面刷新后,list就重新创建了,害得我想了半天。哎。再问一下,我要点击按钮时不刷新页面,又可以执行我的点击事件的代码行不行?如果不行的话,我的list岂不是永远是空的了?
      

  14.   


     程序如所下所示,请各位大虾为我解答一下。        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方法了。)
        请问我应该怎么样处理???? 谢谢!!!!!!
      

  15.   

    学习
    我想的就是+一个static
      

  16.   

    你应该把它保存到Viewstate中
    !!!!!!!!!!!!!!!!!!!!!!!!!!!!
    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;
          }}
      

  17.   


    你这个东西为什么要Static?
      

  18.   

    在WebForm 中
    Static 和Application对像基本上是等效的
      

  19.   

    另外,如果是static也根本不需要考虑回传或是刷新问题
    它是保存在服务器的内存中
    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
      

  20.   

    WEB开发不像桌面程序, 每次刷新都会重新初始化程序.如果想保存信息留着下一次请求时用,可以用ViewState或Session.
      

  21.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (!IsPostBack)
         ArrayList alist = new ArrayList();
    }
      

  22.   

    private void Page_Load(object sender, System.EventArgs e)
    {
    if (!IsPostBack)
         ArrayList alist = new ArrayList();
    }
    应该是把static ArrayList arrList;放在if (IsPostBack)里面吧