c# - 为什么不能通过实例名称访问静态成员?

标签 c# .net compiler-construction static

说我有:

 class Test
 {
      public static int Hello = 5;
 }

这显然有效:

 int j = Test.Hello;

但是为什么这不起作用呢?

 Test test = new Test();
 int j = test.Hello;

实例不能有同名的成员,所以我不明白这对编译器来说怎么可能是模棱两可或无法解析的。

有人知道这是为什么吗?

编辑: 除了语言设计者为了可读性/清晰度/美学/等而选择它之外,还有其他技术原因为什么这应该是其他的吗?

最佳答案

另一个角度:

假设这可能的。当通过 null 的实例变量访问静态成员时,您希望结果是什么?您想要空引用异常吗(但是为什么,因为不需要实例来获取静态成员)?或者您希望它工作(在这种情况下,您会遇到奇怪的情况,即对此实例变量的某些调用有效,但有些却无效)?两种方式都有问题。

关于c# - 为什么不能通过实例名称访问静态成员?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2477081/

相关文章:

c# - 确定 Python/IronPython 函数的声明顺序

c# - FluentValidation - 内部集合未验证

c# - CollectionEditor 的父级

java - 为什么编译器不能在编译时检测到关于 Serializable 声明的这个错误?

compiler-construction - impl 和 traits 如何在较低级别上工作?

c# - 是否应该为 Process.GetCurrentProcess() 调用 Dispose?

c# - 通过 F# 绑定(bind)到 View 模型的接口(interface)实现期间出现 BindingError

c# - 制作 DAL 的最佳方法是什么?

c# - 如何将 Windows 服务安装到另一个系统?

c# - 如何解决 C# 中泛型类型约束的限制?