为什么在实例化之前将对象实例化为null是错误的?

时间:2016-06-09 04:01:01

标签: c# object

我的情况如下:

某些课程

public class Numbers
{
}

其他一些课程

public class Calculations
{
  Numbers objNumber = null;

  public void abc()
  {
    objNumbers = new Numbers();
  }
}

声明Numbers objNumber = null;有什么问题? 我知道我可以简单地忽略null任务;只是好奇为什么这是错误的。

6 个答案:

答案 0 :(得分:8)

没错,它只是不必要的,默认情况下所有引用类型都是null,所以没有必要将变量初始化为null,因为变量的类型是引用类型。 / p>

答案 1 :(得分:2)

c#中的引用类型在声明时会自动使用null值初始化。

没有区别
Numbers objNumbers = null;

Numbers objNumbers;

两者都是一样的。您可以使用调试代码来检查此行为。

答案 2 :(得分:1)

我没有看到您正在做什么的任何问题,只是使用default值创建了其他注释类型。它不会分配null或忽略它。

我看到有一个拼写错误,您可以轻松识别并修复它。

s中有一个额外的objNumbers,该字段定义为objNumber

答案 3 :(得分:1)

null将是object(引用类型)的默认值。所以即使没有你的任务,它也会为空。这句话没有错。

简而言之

Numbers objNumbers = null;Numbers objNumbers;相同。

考虑以下示例;

Numbers objNumbers = new Numbers();
objNumbers = null;

此处null赋予Sense

答案 4 :(得分:1)

严格来说,没有错,因为代码编译(假设你在你的字段名称中加了一个s)。

但是,从设计或正确性的角度来看,这些代码可能不可靠有多种原因。

您的代码具有未初始化为任何有意义值的可变字段:考虑在访问abc()时存储的值之前可能无法调用方法objNumbers的可能性,这将导致任何可能的用例的空引用异常。

现在考虑关注null object pattern并将字段初始化为此Numbers类的此null版本的实例。

该代码产生空引用异常的可能性要小得多......如果在执行方法{{{}之前访问字段,则会强制您考虑应用程序的行为。 1}}。

由于这两个原因,在我看来,避免将字段/属性初始化为null是一个有利的设计规则。

关于该主题的补充阅读,例如this thread,表明处理空值通常被认为是需要解决方案的问题。使用实例和值而不是null初始化代码是正确方向的开始。

答案 5 :(得分:0)

不要太在意。即使你在分配内存之前还没有分配所有对象,也是空的。