0

重複の可能性:
C# .NET 3.5+ のプロパティとフィールドの違い

サンプルコード:

public struct State
{
    private readonly byte state;

    private State (byte pState)
    {
        state = pState;
    }

    // property...

    public static State StateOne
    {
        get
        {
            return new State (1);
        }
    }

    // or...

    public static readonly State StateOne = new State (1);
}

プロパティまたはフィールドを使用する必要がありますか? この例では、パフォーマンスは重要ではありません。

4

3 に答える 3

1

ここでは、プロパティの代わりにフィールドを使用したいと思います。MSの人たちがどのように同様の仕事をしたかを見てください:

//String.cs
public int Length { get; }   //string has a property named Length
public static string Empty = ...    //string has a public field named Empty

「文字列にはEmptyというパブリックプロパティがある」と考えてみてください。いいえ、Emptyは文字列のプロパティではありません。あなたの場合、物事はほとんど同じです。「状態にはOneというプロパティがあります」というのは、本当に奇妙に聞こえます。

于 2013-01-14T10:33:05.783 に答える
1

そのプロパティを新しいインスタンスの Factory として使用している場合を除き、返された "new State(1)" をプライベート メンバーにキャッシュし、それを初期化する最初の呼び出しの後にそれを返す必要があります。(シングルトン)


さらに明確にするために:

あなたが書いたものの違いは、プロパティが常に新しいインスタンスを作成して返すのに対し、フィールドは常に同じインスタンスを指すため、プロパティは新しいインスタンスを作成し続けることです。これはあなたが望むものではなく、パフォーマンスの問題になる可能性があります状況によります。

于 2013-01-14T10:23:06.480 に答える
1

私の意見では、それは必要最小限であり、おそらくより読みやすいため、フィールドです。しかし、現実的には、値渡しのセマンティクスが与えられたこの構造体のように提示されるような些細なケースには実際の違いはありません。

特に-キャッシュされたローカルフィールドを持つプロパティの引数(別の回答 here のように))は、参照の等価性の理由で完全にnullで無効です。これは、定義そのものにより、値の型が参照と等価になることは決してないためです。

于 2013-01-14T10:23:20.753 に答える