【发布时间】:2011-10-10 00:47:52
【问题描述】:
我同意 Mark Seeman 的观点,即 Automatic Properties are somewhat evil 因为它们破坏了封装。不过我确实喜欢它们带来的简洁语法、可读性和便利性。
我引用:
public string Name { get; set; }
代码 sn-p 的问题不在于它包含太多 仪式。问题是它破坏了封装。其实
“[...] getter 和 setter 没有实现封装或信息 隐藏:它们是一种语言合法的违反它们的方式。”
James O. Coplien 和 Gertrud Bjørnvig。精益架构。威利。 2010 年。 134.
大多数时候,添加非空保护子句对于属性设置器来说已经足够了,我想知道是否有比以下方法更好的方法。更好,我的意思是更简洁/更少重复的方式。
使用代码契约:
private string _username;
public virtual string Username
{
get { return _username; }
set
{
Contract.Requires(value != null);
_username = value;
}
}
使用原版 .NET:
private string _username;
public virtual string Username
{
get { return _username; }
set
{
if (value == null) throw new ArgumentNullException("Username");
_username = value;
}
}
【问题讨论】:
-
老实说,这不可能。但是很想听听别人的意见。
标签: c# code-contracts automatic-properties guard-clause