1

したがって、コードには次のような暗号化キーがあります。

private const string _keyc = "blahblahblah";

private static string _key
{
     get { return "blahblahblah"; }
}

コンパイル後、ILDasmで、定数の値を直接確認できることに気付きましたが、2 番目のケースでは確認できません。ldstrただし、キーはまだ下に見えますhidebysig...get_key()

しかし、ILSpy は、私が書いたとおりのソース コードを取得しました。

ここで、ここで自動プロパティを使用することは本当に意味があるのでしょうか? 自動プロパティを使用する利点は他にありますか? 具体的には、このタイプの単純なケースでは、自動プロパティを使用することをお勧めしますか? ありがとう!

4

1 に答える 1

3

自動プロパティは、次の場合にのみ使用できます。

  • プロパティは読み書き可能です。つまり、getsetアクセサーの両方を定義します。アクセサーを 1 つだけ定義している場合は、自動プロパティを使用できません。(プロパティをクラス外のコードからは読み取り専用にし、クラス内からは読み書き可能にする場合は、自動プロパティにアクセサーを定義できることに注意してください。)private set
  • セッターで検証を行う必要はありません。つまり、プロパティ タイプのすべての値が有効です。
  • バッキング フィールドを直接初期化する必要はありませんが、代わりにコンストラクターからプロパティを設定します (または、フィールドに既定値をそのまま残します)。
  • refまたはoutパラメータとして、バッキング フィールドを直接参照する必要はありません。特に、これSystem.Threading.Interlockedにより、フィールドでメソッドを使用できなくなります。
  • フィールドの名前は重要ではありません。(シリアル化は、重要と見なされる場合があります。)

あなたの例に基づいて、読み取り専用プロパティ(セッターのないもの)を実装しています。この場合、次のようなパターンを使用しない限り、自動プロパティを使用できません。

class Example
{
    public static string SomeProperty { get; private set; }

    static Example()
    {
        SomeProperty = "some value";
    }
}

ただし、ゲッターから定数値を返すだけの方がはるかに複雑ではないため、優先する必要があります。

class Example
{
    public static string SomeProperty
    {
        get { return "some value"; }
    }
}

このコードは明確で的を射ています。自動プロパティは、コードを読みやすくするためのものです。この場合、それらは実際に意図を難読化するため、ここでは使用しません。


サンプル コードのプロパティは、自動プロパティではないことに注意してください。それは単なる標準的なプロパティです。自動プロパティはゲッターとセッターを宣言しますが、実装は提供しません。

于 2013-01-17T19:21:56.030 に答える