目前,我有一个类(classB)有一个列表--v
class classB
{
public List<int> alist { get; private set; }
...
我可以从另一个类(classA)
访问此类ClassB foo = new ClassB();
foo.alist.Add(5);
问题是,我可以阻止这种情况发生吗? (让其与其他课程无法改变)谢谢!
答案 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>
这实际上取决于您的要求。