我已经阅读了许多关于静态字段的文章**&#34;静态方法无法访问作为实例字段的字段,因为实例字段仅存在于该类型的实例上。&#34; ** < / p>
但是我们可以在静态类中创建和访问实例字段。
请在下面找到代码,
class Program
{
static void Main(string[] args)
{
}
}
class clsA
{
int a = 1;
//Static methods have no way of accessing fields that are instance fields,
//as instance fields only exist on instances of the type.
public static void Method1Static()
{
//Here we can create and also access instance fields which we have declared inside the static method
int b = 1;
//a = 2; We get an error when we try to acces instance varible outside the static method
//An object reference is required for the non-static field, method, or property '
Program pgm = new Program();
//Here we can create and also access instance fields by creating the instance of the concrete class
clsA obj = new clsA();
obj.a = 1;
}
}
是真的&#34;我们可以访问静态方法中的非静态字段&#34; ?
另一个问题如果我们将类clsA声明为静态类,即使在那时我们在静态方法中声明实例字段时也没有得到任何编译错误?
我哪里出错?
答案 0 :(得分:1)
您无法访问static
方法所属的类的实例字段,因为未在此类的实例上调用静态方法。如果您创建该类的实例,则可以正常访问它的实例字段。
您的b
不是实例字段,而是普通的本地变量。
您引用的句子仅表示您无法在您注释掉的行中执行您尝试的操作:如果没有实例,则无法访问a
。非静态方法使用this
作为默认实例,因此您只需编写a
,即a = 17;
this.a = 17;