一般都是变量在外部定义 page_load内new
但我想知道用意何在,有什么区别
是不是当页面请求结束后,page_load内定义的就会被释放,而外面的则不会,方便下次请求使用?我个人理解是这样

解决方案 »

  1.   

    定义在Page_load 里,出了这个事件失效了
      

  2.   

    变量的作用范围不一样。不过由于web的特性,他的生命周期很短,当页面呈现出来的时候也就结束了,下次再执行的时候又是新的请求,新的变量
      

  3.   

    你个人的理解很差,很肤浅,真是找骂型的
    当你外面定义一个变量int i=0;
    然后在方法Page_Load(){i=100;},再在方法void A(){Response.Write(i.ToString();)},这个输出的是100,不是0,这个i是一个全局变量。
    而你那个什么
    “是不是当页面请求结束后,page_load内定义的就会被释放,而外面的则不会,方便下次请求使用?我个人理解是这样”
    是Page_Load(){int i=100;}这个变量只能是这个方法体内部使用,其他方法是没办法访问到这个变量的
      

  4.   

    其实你的理解也好差,真是废话型的
    我问的是
    那定义在全局,页面请求完是否还存在
    很多class在全局定义,却在load里new,这样的意义何在
    在性能优化方面,是否有体现.
    如果说只是你说的全局和局部这么简单,那我就当我是来找骂的.
      

  5.   

    这个问题如果涉及到内存释放,就很复杂了,涉及到垃圾回收。但是一个很简单的理解:定义在Page_Load()之外,可以在整个页面后台的各个方法中使用,如Button1_Click();反之则不可以。Page也是一个类,定义在Page_Load()之外,就是类的成员变量;定义在Page_Load()中,则是方法变量。这样就简单了吧。
      

  6.   

    给大家2点忠告
    1、说话前仔细看清楚题目,楼主的意思是为什么不在声明的时候new,而到pageload里面new;
    2、理论上的概念上的知识差清楚了再回答问题,不要想当然就说,免得好心办错事
      

  7.   

    一般情况下这两种处理没什么区别,因为大部分的调用都在pageload之后,
    这看你的具体需求,当你会在pageload之前使用该变量的实例的时候就有区别了,
    比如如果在pageload里new的话,在init事件要调用该变量就是报错
    page的加载过程:
    init -> loadcontrolstate -> loadviewstate -> loadpostdata -> onload 
    -> prerender -> saveviewstate ->savecontrolstate ->render 
      

  8.   

    1.每次页面Post/Get到服务器端,服务器都会进行一次页面的生命周期
    就Page内而言是不存在所谓的全局变量的.
    所以在需要ViewState/Cookie/Session/Cache等手段来保存状态/保存需要的值.
    2.千万别乱定义页面局部变量并赋初始值,比如 YourClass A = new YourClass();你可以在该语句下断点就知道了,每次客户端的POST/GET都会触发一次 YourClass A = new YourClass();,这就是为什么WebForm中尽量或者不要使用此类局部变量.
    3."是不是当页面请求结束后,page_load内定义的就会被释放,而外面的则不会,方便下次请求使用?我个人理解是这样"
    不论你放在页面的哪里,都会被释放掉(对象在GC回收前还存在与内存中),参考页面生命周期(使用了持久化手段的除外)http://msdn.microsoft.com/en-us/library/ms178472.aspx
      

  9.   

    简单的说,page_load也可以把它看成一个函数。在函数里面的变量,是局部变量,只有这个函数里面能用在函数外面的变量,是全局变量,各个函数都能调用。
      

  10.   

    楼上的,我再强调一遍
    1、说话前仔细看清楚题目,楼主的意思是为什么不在声明的时候new,而到pageload里面new
      

  11.   

    声明成 public static 此类变量的除外,其作用类似与 Application[""]
      

  12.   

    楼主好像对变量作用域和ASP.NET生命周期理解还不够,变量在作用域外是无法访问的,在同一作用域不能声明名称相同的变量。Page_Load同其他事件一样都只作用于当前HTTP请求,无论是同一用户再次访问这个页面还是回传,都会重新执行Page_Load和其他页面事件,这也是为什么必要时需要判断IsPostBack的原因