阻止其他类添加到具有“私有集”的列表;

时间:2015-07-18 09:54:17

标签: c# list

目前,我有一个类(classB)有一个列表--v

class classB
{
    public List<int> alist { get; private set; }
...

我可以从另一个类(classA)

访问此类
ClassB foo = new ClassB();
        foo.alist.Add(5);

问题是,我可以阻止这种情况发生吗? (让其与其他课程无法改变)谢谢!

2 个答案:

答案 0 :(得分:5)

只需公开if(!isset($_GET["open"]) || !is_numeric($_GET["open"]) || !isset($_GET["shop_id"]) || !is_numeric($_GET["shop_id"])) die(json_encode(array("error" => "Missing request paramters."))); 界面:

IReadOnlyList<T>

从课程内部开始,您继续使用&#34; alist&#34;来添加/删除元素。从课堂外,您只能访问&#34; Alist&#34;,它不允许修改集合(除非明确演员)。

答案 1 :(得分:3)

嗯,这里有各种选择。

  • 您可以将属性类型更改为仅提供只读接口的属性(例如IReadOnlyList<T>IEnumerable<T>。这不会阻止调用者转换返回的引用但回到List<T>

  • 您可以创建一个ReadOnlyCollection<T>来包装您的真实列表,并且只公开它 - 该包装器将阻止调用者完全访问真实列表(除了通过反射)

  • 如果你的代码也不需要修改集合,你可以保留ReadOnlyCollection<T>包装,或使用immutable collections package

  • 您可以避免公开列表,也许可以在班级中实施IEnumerable<T>

这实际上取决于您的要求。