我知道我不能从实例对象中调用静态方法
例如
public class A {
public static int a;
}
A b = new A();
b.a = 5; //which cannot compile
Run Code Online (Sandbox Code Playgroud)
我想知道背后的原因.
因为它毫无意义,并导致误导性代码.当读取代码,它给人的印象是a是部分实例提到了b.
例如,考虑:
ClassA a1 = new ClassA();
ClassA a2 = new ClassA();
a1.a = 10;
a2.a = 20;
Console.WriteLine(a1.a);
Run Code Online (Sandbox Code Playgroud)
打印20而不是10,这将是非常奇怪的.
这在Java中是允许的,我已经看到它导致大量人们对以下事情感到困惑:
Thread t = new Thread(...);
t.start();
t.sleep(1000);
Run Code Online (Sandbox Code Playgroud)
...这使得它看起来像你正在使新线程休眠,而实际上Thread.sleep是一个静态方法,使现有线程睡眠.
我很高兴在C#中不允许这样做.
| 归档时间: |
|
| 查看次数: |
212 次 |
| 最近记录: |