我对班级成员的可访问性有疑问。
我有3个一起工作的类,需要对每个其他属性的完全访问权限。 classA,classB,classC
然而,classA在其他地方使用,该类的所有用户应该只具有对所有结构的读访问权!!
这些课程如下:
public class classA
{
public ClassB B { get ; }
...
}
public class classB
{
ClassC C { get ; set ; }
...
}
public class classC
{
ArrayList L { get ; set ; }
...
}
如何管理classA和classB对classC具有完全访问权限, 但是A类的所有用户都无法修改内部的任何内容?
例如,这仍然是可能的:(
classA A = new A();
A.B.C.L.Add( something);
即使A.B因缺少设置而无法修改。
我看到的一种可能性是,属性A.B返回结构的深层副本,因此修改A.B不会影响源结构,但我对此并不满意。
是否有一种方法可以在编译时检查写访问,就好像我使用'readonly'或省略'set;'?
答案 0 :(得分:2)
最简单的方法是提供一个只读代理来访问B中的数据 - 就像ReadOnlyCollection一样,它包装了一个常规集合,提供了同一个接口的只读版本。所以你不会返回classB,而是返回ReadOnlyB。
或者,这个只读接口可以在classA中实现,以允许更多“直接”访问数据。
然后你可以将A,B,C放入不同的程序集中,使B,C内部生成,以便客户端看不到它们。