为什么静态方法不会抛出NullReferenceException?

时间:2010-10-06 06:54:08

标签: c#-3.0

为什么静态方法不会抛出NullReferenceException?或者它会抛出NullReferenceException?如果它不会抛出错误,任何人都可以用相关的例子解释原因。

3 个答案:

答案 0 :(得分:8)

静态方法与类型的实例无关,因此没有引用可能为null。

当然,如果静态方法的 body 做了一些通常会抛出异常的东西,它会像往常一样传播:

class Test
{
    static void Main()
    {
        GoBang();
    }

    static void GoBang()
    {
        string s = null;
        int y = s.Length; // Bang! NullReferenceException
    }
}

答案 1 :(得分:1)

使用从不null的类调用静态方法。使用实例调用实例方法,因为程序员没有null就可以new

答案 2 :(得分:0)

如果CLR在类型构造函数中抛出未处理的异常(任何类型),则认为任何类型都是不稳定的。尝试访问unstable类型的任何成员将导致抛出TypeInitializationException。

因此,将抛出NullReferenceException,但运行时会将其编组到TypeInitializationException中。