1

我有一个复杂的 c# 类,它有几个平面成员和几个嵌套的复杂类型。

作为一般做法,如果没有数据,我不会初始化“嵌套”复杂类型。

例如,如果我有一堂课

Public class Person
{
 public string FirstName{get;set;}
 public Address{get;set;}
}

我不会做Person p = new Person(){FirstName="Test", Address = new Address()};

但是,我被告知要初始化“所有子”复杂类型,尽管我认为这不应该是这种情况。为什么在我们没有数据的时候分配内存。您如何确定对象是否为空。您是否比较所有值/定义某种滞后,或定义一个专门的子类来表示空实例。

您的反馈将不胜感激。

4

3 回答 3

1

在访问之前检查每个属性的运行时成本null可能高于使用“空”对象初始化所有字段(请参阅空对象模式)。“空”/“空对象”的内存成本可能非常小,因为您可以简单地在所有对象之间共享单个只读实例。

此外,如果您保持某些对象的某些部分未初始化,那么开发人员null在访问/使用对象之前查找是否需要检查的成本非常高。

基本上,您可能会因为不初始化某些字段而获得一些好处,但您需要花费大量时间确保对属性的所有访问都得到适当的保护,以免访问null字段。

于 2013-10-29T02:18:39.643 回答
0

您可以使用此模式:

Public class Person
{
  private Address address;

  public Address Address 
  {
    get
    {
      return address ?? (address = new Address()); 
    }
  }
}
于 2013-10-29T02:22:42.660 回答
0

为简单起见,您可以在构造函数中进行初始化:

public class Person
{
    public Person()
    {
        this.Address = new Address();
    }
    public string FirstName {get; set;}
    public Address {get; set;}
}

.

// Don´t need to do Person p = new Person(){ FirstName="Test", Address = new Address()}; 
Person p = new Person();

不必担心,除非您拥有数百万个对象,否则您知道您将拥有。

于 2013-10-29T02:19:41.317 回答