2

私は 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()" する必要がありますか?

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

4

1 に答える 1

0

C# は、不変コレクションのオプションとして ReadOnlyCollection を提供します。

それが役に立てば幸い!

于 2014-05-30T08:19:05.090 に答える