5

オブジェクトの状態を示す読み取り専用フィールドを持つクラスがあります。これらのフィールドは、外側から見える必要があります。

最初に、これらのフィールドを次のpropertiesように示しました。

public class MyClass
{
    private readonly MyState mystate = new MyState();
    public MyState MyState { get { return this.mystate; } }
}

しかし、これではreadonly、私のクラスのユーザーは状態のインスタンスを変更できません。したがって、私は自分の を削除し、フィールドを aspropertyに設定し、Pascal Case で名前を変更しました。readonlypublic

これまでのところ、私が見た唯一の問題はリファクタリングpublic propertyでしpublic readonlyproperty.

Jimmyが (コードを変更せずに) オブジェクトを台無しにすることはできますpropertyか?

4

2 に答える 2

4

プロパティにしない理由はありません。CLI は通常、このような単純なプロパティで「get」をインライン化します。もちろん、これは追加のコード行です。

厳密に言えば、フィールドとプロパティの間の変更は重大な変更です。異なる IL 操作であることに加えて、特に構造体が関係している場合は、異なるセマンティックでもあります。

プロパティにすることで、後で変更するという点で最高の柔軟性が得られます。遅延読み込み、インダイレクションなど

セキュリティに関して: 実際、読み取り専用フィールドは、取得専用プロパティに広く似ています。誰かがそれをやりたいと思うほど気にかけている場合、両方とも反射によって等しく悪用される可能性があります。私の投票はまだ公共の財産になります:)

于 2012-07-21T14:50:00.127 に答える
0

実際、これが C# の優れた点です。プロパティの代わりにパブリック フィールドを使用でき、後でプロジェクト全体を書き直すことなく気が変わることができます。

public readonly MyState mystate = new MyState();

そして後で、例えば次のことができます:

private readonly MyState mystate = new MyState();
public MyState MyState { get { someCheck(); return this.mystate; } }
于 2012-07-21T14:52:07.090 に答える