Toa*_*oad 6 .net c# compiler-construction static
说我有:
class Test
{
public static int Hello = 5;
}
Run Code Online (Sandbox Code Playgroud)
这显然有效:
int j = Test.Hello;
Run Code Online (Sandbox Code Playgroud)
但为什么这不起作用?
Test test = new Test();
int j = test.Hello;
Run Code Online (Sandbox Code Playgroud)
该实例不能有一个同名的成员,所以我不知道这对编译器来说是多么模糊或不可解析.
任何人都知道为什么会这样?
编辑:有没有任何其他技术原因,为什么这应该是语言设计师选择这个为可读性/清晰度/美学/等?
Aak*_*shM 14
另一个角度:
假设这是可能的.当通过实例变量访问静态成员时,您会想要的结果是null什么?您想要一个空引用异常(但为什么,因为不需要实例来获取静态成员)?或者你希望它能工作(在这种情况下你会遇到奇怪的情况,这个实例变量的一些调用工作,但有些没有)?无论哪种方式都有问题.
sta*_*ica 11
记住静态方法(或属性或字段)是什么:它们属于一个类,而不属于该类的任何特定实例.因此,它们在所有实例中共享.
因此,必须通过类名而不是通过对象访问静态成员是合乎逻辑的.C#语言在这方面的设计可能不同......但事实并非如此.
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |