如何禁止深层结构的写访问?

时间:2013-04-07 13:34:57

标签: c# visibility

我对班级成员的可访问性有疑问。

我有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;'?

1 个答案:

答案 0 :(得分:2)

最简单的方法是提供一个只读代理来访问B中的数据 - 就像ReadOnlyCollection一样,它包装了一个常规集合,提供了同一个接口的只读版本。所以你不会返回classB,而是返回ReadOnlyB。

或者,这个只读接口可以在classA中实现,以允许更多“直接”访问数据。

然后你可以将A,B,C放入不同的程序集中,使B,C内部生成,以便客户端看不到它们。