以下两者之间有任何区别

时间:2011-01-28 07:34:50

标签: c# .net

1)A a;
 2)A a = null;

有什么不同吗?

2 个答案:

答案 0 :(得分:5)

对于局部变量,绝对 - 第一个没有明确赋值,第二个是。例如:

void DoesntCompile()
{
    A a;
    string x = a.ToString(); // Can't use a - it's not definitely assigned
}

void CompilesButGoesBang()
{
    A a = null;
    string x = a.ToString(); // Throws a NullReferenceException
}

对于字段(静态或实例),如果A是引用类型,则它可能没有任何区别。我可以编写一个程序来演示它是一个静态变量的情况下的差异,但它依赖于使用反射执行静态类型初始化程序两次。讨厌。

如果你能提供更多关于你问的原因的背景,那真的会有所帮助。

答案 1 :(得分:2)

在C#中,变量默认根据列出的规则here

这两者之间的主要区别在于,对于案例2,变量可以被视为“明确分配”。根据变量的使用方式,可能需要在编译器允许某些操作之前明确赋值。关于明确分配,请参阅this note