【问题标题】:What is the reason behind this? (Not to be able to access class field from static method) [duplicate]这背后的原因是什么? (不能从静态方法访问类字段)[重复]
【发布时间】:2018-02-06 08:24:48
【问题描述】:

不能从同一个类中的静态方法访问类字段?我不明白为什么要这样设计。

using System;

namespace StaticMethodAccessInstanceField
{
class Program
{
    int m = 2;

    static void Main(string[] args)
    {
        Display();
    }

    static void Display()
    {
        Console.WriteLine(m);
    }
}
}

注意:上面的代码不起作用。当我将字段设为静态或从方法头中删除静态时,它可以工作。

【问题讨论】:

  • 假设这个类被称为Person。而m 被称为Age。那么你的Display 方法就是要显示Age。问题是 - 要显示谁的年龄
  • 谢谢你的解释。

标签: c#


【解决方案1】:

因为当您在静态方法中时没有实例。因此,您无法识别(更不用说访问)您想要的变量。

【讨论】:

  • 类字段对同一个类的所有方法不可见吗?
  • @Lyrk 可见并不意味着可访问。问题是:静态成员没有它引用的实例。但是,当在静态成员中调用 instance 成员时,任何人都应该知道您指的是 哪个 实例?你的类可能有几十个实例,那么运行时应该从哪个实例中获取成员 m 的值?
  • 我明白了,谢谢。
【解决方案2】:

因为 instance 成员只能从实例访问。想象一下,如果您创建了Program 类的两个实例,它应该选择哪个m

你应该指定实例,例如:

Program p = new Program();
Console.WriteLine(p.m);

【讨论】:

    猜你喜欢
    • 2010-09-22
    • 1970-01-01
    • 2022-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多