ram*_*ral 10 c# encapsulation dry
所以我听说在这样的属性中验证一个值:
//dummy example, let's assume that I want my value without dots
public string MyProp
{
set
{
if(value.Contains('.'))
throw new ArgumentException("Must not contain '.'", "value");
}
}
Run Code Online (Sandbox Code Playgroud)
是错的,我应该避免它.
但在早些时候,我被告知这是好方法.我们可以使用封装,只有一个地方可以检查,DRY等.
我的小榜样出了什么问题?
Jul*_*ano 12
在属性设置器中抛出异常没有错.但是你应该抛出一个ArgumentException,并且实际上也设置了属性的值!
private string _myprop;
public string MyProp{
set{
if(value.Contains('.')) throw new ArgumentException("Must not contain .");
this._myprop=value;
}
get { return this._myprop; }
}
Run Code Online (Sandbox Code Playgroud)
属性getter应该是简单的操作,没有任何先决条件.如果getter可能抛出异常,请考虑将该属性重新设计为方法.此建议不适用于索引器.由于参数无效,索引器可能会抛出异常.
从属性设置器中抛出异常是有效且可接受的.