通过引用修改只读字段的C#

时间:2013-09-01 16:43:21

标签: c# memory-leaks class-design encapsulation

我来自C ++而且我非常想念C#中的“const”。

我已经在我的代码中找到了一个讨厌的错误,请考虑一下:

class MyClass {
    BitArray myFlags { get; private set; } // this should not be able to be manipulated from outside

    // ... constructor here creating the BitArray ...
}

// ...

MyClass foo = new MyClass();

BitArray bar = foo.myFlags;
bar.SetAll(false); // circumvents encapsulation eventually putting the class in inconsitent state

用户可以毫无问题地甚至无意中更改我的对象的状态。 如何安全地公开类的成员,而不让用户有机会操纵对象的状态?在向该成员提供公共(读取)访问权限时,是否必须“.clone()”每个基于参考的成员(基本上都是一切)?

我想要实现的是适当的封装。当用户创建我的类的实例并读取成员时,我希望该成员不受写入保护,除非它还有一个公共setter。

1 个答案:

答案 0 :(得分:0)

C#提供ReadOnlyCollection作为不可变集合的选项。

希望它有所帮助!