通常会将内部数据结构作为属性公开给您的业务类。但是当我们必须公开类似数组的结构(如 List
建议将此类数据结构的克隆公开为属性,这样内部结构就不会受到干扰。
有没有人对此有完善的解决方案?
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());
}
}
最佳答案
您可以使用 rules.AsReadOnly()
返回 rules
的只读版本,而不是返回 Clone
。
public IList<Rule> Rules
{
get { return rules.AsReadOnly(); }
// set { rules = value; -- should not be allowed to set if read only!
}
注意 IList
。
关于c# - 使用属性公开类似数组的数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/641923/