这是我的问题:
class A
{
B mB = new B(); //this is fine
int y = mB.method1(); //this is error;
public void method2()
{
int x = mB.method1(); //this is fine
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以解释上面的差异吗?
使用类中的方法初始化字段(与声明同时)必须在类的实例上完成.
由于您不允许在初始化字段时引用实例本身(请参阅C#语言参考版本4.0中的10.5.5.2节和Eric Lippert的注释)(因为字段初始化发生在任何构造函数执行之前),这不是可能.
如果调用的方法是静态的(因此在类型上声明),那么你可以调用它,因为静态成员在实例成员之前被初始化.
现在,不保证字段初始化的顺序 - 这意味着编译器可能决定y之前进行初始化mB.在这种情况下,如果允许在字段上调用方法来初始化另一个字段,那么您将得到一个NullReferenceException.最好首先避免这个问题而不允许这种行为.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |