Main() 不想访问类变量
Posted
技术标签:
【中文标题】Main() 不想访问类变量【英文标题】:Main() doesn't want to access a class variable 【发布时间】:2011-03-19 06:09:31 【问题描述】:为什么我可以从“method()”而不是 Main() 方法访问 X 变量?
class Program
int X; // this is the variable I want access
static void Main(string[] args)
int a;
a = X; // this doesnt work, but why?
void metodo()
int b;
b = X; //this works, but why?
【问题讨论】:
【参考方案1】:试试
static int X
X
是一个实例变量,这意味着您的类的每个实例都有自己的X
版本。然而,Main 是一个静态方法,这意味着对于 Program
类的所有实例只有一个 Main,因此访问 X
没有任何意义,因为可能有多个 X 或可能有如果没有创建 Program
实例,则根本没有。
使 X 自身静态,意味着所有 Program
实例将共享 X
,因此共享方法将能够访问它。
【讨论】:
【参考方案2】:Main() 是一个静态函数。不能从静态函数访问非静态变量。
【讨论】:
【参考方案3】:X
是一个实例变量,但Main
是一个静态方法,即它不与class Program
的任何特定实例相关联。
【讨论】:
【参考方案4】:X
和 metodo()
都在实例级别。 Main()
处于静态级别。如果您希望X
可用于Main()
和metodo
,则需要将其声明为静态(即private static int X
)。
【讨论】:
【参考方案5】:要访问 X,您需要使用 static 关键字标记它或创建 Program 类的实例:
1.
static int X
2.
static void Main(string[] args)
int a;
var program = new Program();
a = program.X;
您应该阅读更多关于类成员和类实例成员的信息。
【讨论】:
【参考方案6】:假设你有一个带有两个变量的 Person 类:
眼睛颜色 眼数眼睛的数量属于类(静态),而眼睛的颜色属于每个实例。
如果您将眼睛的数量从 2 更改为 3,那么世界上的每个人都会立即拥有 3 只眼睛,因为所有实例共享相同的静态变量。
如果您将某个人的眼睛颜色从蓝色更改为红色,那么只有该人的眼睛会是红色的。
如果您能够访问静态方法中的非静态成员,它会取什么值?由于没有明智的答案,因此不允许发生。
【讨论】:
以上是关于Main() 不想访问类变量的主要内容,如果未能解决你的问题,请参考以下文章