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】:

Xmetodo() 都在实例级别。 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() 不想访问类变量的主要内容,如果未能解决你的问题,请参考以下文章

从 C++ 中的类访问私有变量

使用 Kivy 访问类变量

如何将页面中声明的变量访问到内部类?

如何从另一个类(java)访问主类的变量?

[从Java中的其他类访问私有变量

main 静态方法 非静态方法