静态方法,静态变量

public partial class Add3 : System.Web.UI.Page
{
public DataRow drw;
public String Temp = Request.Params["iCustomerId"];
...........................................
.........................................
错误指示public String Temp = Request.Params["iCustomerId"];有问题
在page_load()中声明String Temp = Request.Params["iCustomerId"];就没问题


问题解决方案

Temp 是页面类的成员变量,现在初始化该成员变量发生错误了,你必须知道初始化该成员变量就代表现在你这个页面类还没有实例化,然后一个未实例化的变量又去调用System.Web.UI.Page.Request.Params属性(该属性又去调用一个其它类的静态方法!!),可能吗?
必须明白几点
1.静态方法由类名调用,不管该类实例化了多少次,该类的静态方法就只有一份,被该类所有实例共享,都可要调用它噢,就好像你公司的办公室有好几间,但共享走廊里面一个厕所
2.静态方法只能调用静态变量,静态方法,静态..等
3.成员方法任意调用静态方法或者静态变量,静态..等,但是成员变量的初始化却不能调用静态属性等,因为初始化成员变量就代表所在类还没有实例化,又如何去调用静态的东西??

4.由上面的第3条又可以多出最重要的一条规则:对象实例化后才能调用静态的东西

可能你会说在类里面成员变量初始化时不能调用静态的东西,那该类里面的方法为什么可以呢?因为类的方法是没有初始化的概念的,类的属性也没有,
所以你上面的东西要改改,用

public String Temp {
get{return Request.Params["iCustomerId"];}
}
绝对可以的!!

再重复一次:静态的东西只能由实例去调用,因此初始化过程是无法调用静态的

问题解决方案


public String Temp = HttpContext.Current.Request.Params["iCustomerId"];

HttpContext和HttpRequest是两个类,HttpContext的Current是一个静态属性,上面说到的第2条规则,静态的方法由静态的变量,静态方法等调用,所以这种也是可以运行的.但有人说这种方法不好,我不知道为什么,难道是影响性能?

你可能感兴趣的:(静态变量)