编程语言
首页 > 编程语言> > c# – 是否应始终初始化Model类的复合属性?

c# – 是否应始终初始化Model类的复合属性?

作者:互联网

我试图在SO上找到类似的问题,但没有运气.道歉,如果它是重复的.

声明它们时实例化类型变量有什么缺点?

在许多代表业务对象模型的类中,我们有这样的事情:

public class RateArea {...}
public class FlatRateSchedule 
{
    public string ScheduleID {get;set;}
    public decimal MaxAmount {get;set;}
}

public class PricingData
{
    private List<RateArea> rateAreaList = new List<RateArea>();
    private FlatRateSchedule flatRateSchedule = new FlatRateSchedule();

    public List<RateArea> RateAreaList
    {
        get { return rateAreaList; }
        set { rateAreaList = value; }
    }

    public List<FlatRateSchedule> FlatRateScheduleList
    {
        get { return flatRateScheduleList; }
        set { flatRateScheduleList = value; }
    }
}

在某些时候,这个PricingData类被初始化并且一些属性是水合的(但并不总是所有属性).

我们的想法是创建类的“空白”实例,这样任何属性都不会为null.这很方便,因为在访问它的成员之前,我们永远不必检查是否有任何属性为null.无论属性是否水合,它们永远不会对消费阶层“无效”.如果未初始化属性,则代码需要在每次访问属性之前检查null.

一个笼统的约定是“一个类的所有属性应该始终初始化并且永远不会为空”真的很糟糕吗?

除了使用一些资源来实例化和存储这些“默认”类实例之外,null异常检查代码的节省似乎也是值得的.我们错过了什么吗?

解决方法:

这里不是专家但是

>如果是List,则需要初始化,因为如果不是,则无法添加元素.
>如果在整个课堂生活中,可能并不总是需要你的属性,你可以懒得加载它们.

你可以使用.Net 4.0的Lazy<T>类.

来自Msdn:“使用Lazy实例推迟创建大型或资源密集型对象或执行资源密集型任务,特别是在程序生命周期内可能不会发生此类创建或执行时.”

除此之外,我认为所有属性都是密集的,并且让每个消费类都进行空检查.懒惰&LT T&GT解决这个问题.

标签:c,net,coding-style,instance-variables,class-design
来源: https://codeday.me/bug/20190621/1255549.html