为什么我们不能在另一个类方法之外使用类方法?

时间:2013-01-11 16:23:42

标签: c# oop

这是我的问题:

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
    }
}

有人可以解释上述差异吗?

1 个答案:

答案 0 :(得分:7)

使用类中的方法初始化fields(与声明同时)必须在类的实例上完成。

由于在初始化字段时不允许引用实例本身(请参阅C#语言参考版本4.0和the comment by Eric Lippert中的第10.5.5.2节)(因为字段初始化发生在任何构造函数执行之前),这是不可能的。

如果调用的方法是静态的(因此在类型上声明),那么可以调用它,因为静态成员在实例成员之前被初始化..


现在,无法保证字段初始化的顺序 - 这意味着编译器可能决定在y之前初始化mB。在这种情况下,如果允许在字段上调用方法来初始化另一个字段,则会得到NullReferenceException。最好首先避免这个问题,不要允许这种行为。