为什么静态方法不会抛出NullReferenceException?或者它会抛出NullReferenceException?如果它不会抛出错误,任何人都可以用相关的例子解释原因。
答案 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中。