第一个示例将ColumnCtrl
属性初始化为构造Detail
类时的值,其中第二个属性将保留为null
。如果它没有在其他地方初始化,你应该期望NullReferenceException
s。
只要您在使用第二个示例时明确初始化ColumnCtrl
属性,它们就是完全相同的东西。
Detail newDetail = new Detail();
newDetail.ColumnCtrl = new List<UserControl>();
newDetail.ColumnCtrl.Add(new UserControl());
一种替代(尽管稍微更详细)。将懒惰地实例化ColumnCtrl
属性消除实例化它的开销时Detail
构造:
public class Detail
{
public Detail()
{
this.ColumnCtrl = new List<UserControl>();
}
private List<UserControl> columnCtrl = null;
public List<UserControl> ColumnCtrl
{
get
{
// Missing appropriate locking mechanisms for brevity
if (columnCtrl == null)
columnCtrl = new List<UserControl>();
return columnCtrl;
}
// The set is not absolutely necessary if you never need to set it
// from outside of Details but if you do...
set
{
columnCtrl = value;
}
}
}
谢谢大家的回答。它现在使水晶感觉! – 2012-02-29 20:44:21