通常将内部数据结构作为属性公开给您的业务类。但是,当我们必须公开类似数组的结构(如 List 规则)时,我们可能会遇到错误使用的问题(如选项 1 中所示)。
建议将此类数据结构的克隆公开为属性,以便内部结构不会受到干扰。
有没有人对此有一个很好的解决方案?
public class Rule
{
}
public class RulesManager
{
List<Rule> rules = new List<Rule>();
public List<Rule> Rules
{
get { return rules; }
set { rules = value; }
}
public void Add(Rule r)
{
rules.Add(r);
// Do something else after add;
}
public void Delete(Rule r)
{
rules.Remove(r);
// Do something else after delete;
}
}
public class CallingCode
{
public static void Main()
{
RulesManager r = new RulesManager();
// Option 1
r.Rules.Add(new Rule());
// Option 2
r.Add(new Rule());
}
}
而不是返回一个Clone
,您可以返回只读版本rules
using rules.AsReadOnly()
.
public IList<Rule> Rules
{
get { return rules.AsReadOnly(); }
// set { rules = value; -- should not be allowed to set if read only!
}
请注意IList
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)