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实例推迟创建大型或资源密集型对象或执行资源密集型任务,特别是在程序生命周期内可能不会发生此类创建或执行时.”
除此之外,我认为所有属性都是密集的,并且让每个消费类都进行空检查.懒惰< T>解决这个问题.
标签:c,net,coding-style,instance-variables,class-design 来源: https://codeday.me/bug/20190621/1255549.html