私は 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()" する必要がありますか?
私が達成したいのは、適切なカプセル化です。ユーザーが私のクラスのインスタンスを作成し、メンバーを読み取るとき、パブリック セッターも持っていない限り、メンバーを書き込みから保護する必要があります。