我的情况如下:
某些课程
public class Numbers
{
}
其他一些课程
public class Calculations
{
Numbers objNumber = null;
public void abc()
{
objNumbers = new Numbers();
}
}
声明Numbers objNumber = null;
有什么问题?
我知道我可以简单地忽略null
任务;只是好奇为什么这是错误的。
答案 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)
不要太在意。即使你在分配内存之前还没有分配所有对象,也是空的。