今天上午遇到一个问题,超郁闷。自己写了一个类,类里一个方法,用来获得数据。我在类里声明了两个字段,结果一直提示“字段初始值设定项无法引用非静态字段、方法或属性”,而在方法体内声明同样类型的两个字段,就正确。希望高手们从理论上好好解释一下!我声明的类示例如下:
public partial class _Default : System.Web.UI.Page
{
string x = "asdfasdfasdf";
string y="asdf"+x;//这样错误,没法访问
protected void Page_Load(object sender, EventArgs e)
{
string a = "asdf";
string b = "fasdf" + a;//这样在方法体内就正确
Response.Write(b);
}
}
这些应该是基础,不知道同样类型的x,y和a,b,为什么x,y不行,而a,b可以用呢?请给出详细些的理论解释!谢谢
------解决方案--------------------------------------------------------
虽然会这个问题,但是决定不回答,因为:
1:不是高手,你这个题目太让人反感;你不用激大家也会有人进来看;
2:你好长时间前的帖子还没有结;
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
public partial class Default2 : System.Web.UI.Page
{
static string x = "xxx";
string y = "yyy" + x;//这样错误,没法访问
protected void Page_Load(object sender, EventArgs e)
{
string a = "aaa";
string b = "bbb" + a;//这样在方法体内就正确
Response.Write(b);
Response.Write(y);
}
}
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
看到了两个留言,加上12楼的朋友问起来,我就说说我的想法,都是个人见解。
不对的地方请见谅,水平有限。
------解决方案--------------------------------------------------------
------解决方案--------------------------------------------------------
暂时抛开这个例子是否会被多次载入、使用不说
static string x = "asdfasdfasdf";
string y="asdf"+x;//这样是正确的为什么?
static成员变量是一个初始值设定的操作,不是一个赋值操作。第一个载入的人就开始设定了这个值。
这个例子为什么能够运行?
是因为static不需要借助任何对象,编译器不会为他加一个this指针。
问题2:
为什么this如此重要?
Public Class A
{
private int _myint;
public int Myint
{
get{}
set{}
}
A(){}
public void ss(int myint)
{
Myint=myint;
}
}
看看被编译器搞过的类
Public Class A
{
private int _myint;
public int Myint
{
get{}
set{}
}
A(){}
public void ss(int myint,(A *)this)//可以看看c++Mfc框架之类的书
{
this.Myint=myint;
}
}
为什么编译器会这么干?
A a1=new A();
A a2=new A();
a1.ss(1);
a2.ss(2);
看得出来,this是为了我们区分对象实例而来。
还是lz的例子,如果一个变量被赋值,这个this(对象),还没有实例化,this是无法使用的
1、static不属于任何一个对象。