大家好,请不要太苛刻。我是初学者。
b / n以下内容的最佳做法是什么,有什么区别:
的#1
public SodaDateTime DteRegistered
{
get { return DateTimeUtil.NullDateForMaxOrMinDate(this._dteRegistered); }
set
{
if (DateTimeUtil.IsNullDate(value))
{
this._dteRegistered = new SodaDateTime("DteRegistered", this, DateTime.Today);
}
else
{
this._dteRegistered = new SodaDateTime("DteRegistered", this, value);
}
}
}
VS。
#2
public SodaDateTime DteRegistered
{
get
{
if (DateTimeUtil.IsNullDate(this._dteRegistered))
{
_dteRegistered = new SodaDateTime("DteRegistered", this, DateTime.Today);
}
return this._dteRegistered;
}
set { _dteRegistered = new SodaDateTime("DteRegistered", this, value); }
}
答案 0 :(得分:1)
Microsoft发布了Property Design Document,其中提供了我认为适用于您的问题的以下指导:
✓DO为所有属性提供合理的默认值,确保默认值不会导致安全漏洞或代码效率极低。
✓如果属性设置器抛出异常,则DO 保留以前的值。
X避免从属性getter中抛出异常。属性getter应该是简单的操作,不应该有任何先决条件。如果getter可以抛出异常,那么它应该被重新设计为一种方法。
基于属性应该具有有效默认值并且getter应该是简单操作的指导,我建议您在setter中进行验证。如果传递的值无效,则在设置器中抛出ArgumentOutOfRangeException
也是合理的,这样使用您的类的客户端就能理解正在发生的事情
// Provide reasonable default value
private SodaDateTime _dteRegistered =
new SodaDateTime("DteRegistered", this, DateTime.Today);
// Getter is a simple operation without preconditions
public SodaDateTime DteRegistered
{
get { return _dteRegistered; }
set
{
if (value == null)
{
throw new ArgumentOutOfRangeException("value cannot be null");
}
if (DateTimeUtil.IsNullDate(value))
{
throw new ArgumentOutOfRangeException("value cannot have a null date");
// or: value = DateTime.Today;
}
this._dteRegistered = DateTimeUtil.NullDateForMaxOrMinDate(
new SodaDateTime("DteRegistered", this, value));
}
}