2011-11-02 13 views
4

ASP.Netアプリケーション内でこれらの変数を使用することに関して少し混乱しました。C#ASP.Net Webforms - 文字列 - 静的読み取りと静的読み取り

public static string Complete = "Complete";

限り私は承知している、この値は、すべてのユーザーに対してグローバルになりますが、値は、アプリケーションプールのリサイクルに起因して存在することが保証されていないと値がリサイクルに割り当てられていませんか?

public static readonly string Complete = "Complete";

readonlyフラグは、値が原因値は常に利用できるようになります。つまり、クラスの静的コンストラクタで初期化され得るために常に利用可能であることを意味していますか?

限り、私は承知しているとして、以下がreadonlyシナリオで起こる:

  • 変数

    1. アクセスが構築されたクラスですか?いいえ? 1

    に変数

  • アプリケーションの再起動
  • ゴーを割り当てreadonlyと非読み取り専用バージョンの間に違いはありますか?私は、変数を保証するために、次のように、我々はまた、それを書くことができたとします

    public static string Complete { get { return "Complete"; } }

  • +1

    それとも単に=「コンプリート」コンプリート '公共のconst文字列の書き込み、私は' const'を含めるつもりだったが、 '語っ使用している場合は、すべての参照アセンブリは更新する必要はありません' ;-) –

    +1

    をconst? – Mig

    +0

    @MiG正確には、constを軽く使用しない非常に強力な理由です。できるだけconstの上でreadonlyを優先します。 – Icarus

    答えて

    4

    readonly単に一度初期化変更される変数が保持する値を停止します。それは静的の生命時間に影響を与えません - 前と同じです。

    属性が参照の場合、readonly属性は、基本オブジェクトが変更されるのを停止せず、静的変数の値が変更されないようにします。クラス参照の場合、その値参照自体です。読み取り専用の

    MSDN C#のドキュメント:

    http://msdn.microsoft.com/en-us/library/acdd6hb7(v=VS.100).aspx

    readonly静的constと同様に影響を与える必要がありますあなたがグローバルを持っていることについて話すとき(あなたが静的を作っている事がconstためelligibleであると仮定した場合)変わらない価値。最初に静的にアクセスしようとすると、その場で初期化され、決して変更することはできません。そう、それは行動がいくつかの重要な違いがあります - 後者は一定の時間をコンパイルしており、前者はありませんが

    public const string Something = "what"; 
    

    そう:効果で

    public static readonly string Something = "what"; 
    

    ウィルは、のように振る舞います。私は、変化しない世界的に利用可能な価値観の考え方についてもっと話していました。

    ASPの点では。NETとリスタティックのリサイクルでは、読み込み静的とconstの違いは、初期化されていない場合、静的に単純に初期化のチャージが発生することです。ただし、使用方法については、constが適しています。

    +0

    したがって、ASP.Netアプリケーションでは、アプリケーションプールリサイクルのために、両方の変数が常に期待値を返しますか? – Mig

    +0

    @MiGもし読み込み専用の静的なものがリサイクルされていれば、その値がクレイジーなランタイムで決まっていない限り、 'static readonly'と' const'は同じものを実現します。これは、最初のアクセス時にスタティックが初期化されるためです。値が基本であれば、 'const'に行きます。 –

    +0

    今、私はそれと一緒にいます。最初のアクセスでは 'readonly'以外は初期化されません。 – Mig

    0

    public static string Complete = "Complete";

    が保証されています。しかし、それは変更することもできます。定数にしたい場合はconstを使用してください。静的対readyonly対のconst ABOT

    詳細情報読み取り専用Here

    0

    readonlyキーワードは、それが静的フィールドであるため、このクラス変数のみ(その宣言とともにまたはそのc'torで初期化することができますコンパイラに指示します、とにかく2つのオプションは同等です)。

    それ以外の違いはありません。

    HTH - トーマス