对静态方法有一点疑问。
文档说“静态方法无法访问实例成员变量或静态方法和属性只能访问静态字段和静态事件,因为它在创建实例之前就已经执行了很多”。因此,以下代码无法编译
class staticclass
{
int a = 20; //Private member
public static void staticmethod()
{
Console.WriteLine("Value Of Instance member variable is: {0}",a); // Error
}
}
但我们也知道,在静态方法中,我们可以创建同一个类的实例。
因此,稍微更改上面的代码我可以在静态方法
中访问实例变量class staticclass
{
int a = 20; //PRivate Memeber
public static void staticmethod()
{
staticclass sc = new staticclass();
Console.WriteLine("Value Of Instance member variable is: {0}",sc.a);
}
}
此编译正常并显示结果Value Of Instance member variable is: 20
。
这是正常行为吗?或者我无法正确理解它?
我的意思是,如果是这种情况那么陈述如何成立static methods can only access static fields
?
感谢。
答案 0 :(得分:5)
您误解了静态意味着什么 - 这意味着您只能访问this
的静态成员。它不会限制您访问其他对象的非静态成员。
您在静态方法中访问的“其他”对象碰巧是同一个类的实例并不重要。