2017-11-23 4 views
-5

オブジェクトを構成するとき、初期化順序は次の通りです:
1.フィールドにはデフォルト値が与えられます。数値の場合 "0"が与えられます)
2.コンストラクタが呼び出されます。パラメータのないコンストラクタがある場合、プライベートフィールドをパラメータで初期化する方法はありますか? (私は、フィールドが既にデフォルト値で初期化されていると仮定します。なぜなら、それらは "readonly"なので、一度値が与えられると、その値は後で変更されるべきではないからです)。
私が間違っている場合は私を修正してください。オブジェクトのフィールドのためのc#のreadonlyキーワード

+1

質問が不明です。 int type {get;}の代わりに[mcve] – UnholySheep

+0

int type = 0を使用して説明してください。セット; } – jdweng

+0

おそらくここでもう一度読むことができます[C#MSDN読み取り専用プロパティ](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/readonly)もう一度.. 'Good Luck ' – MethodMan

答えて

3

単純に:readonlyは、建設後に設定できない(少なくとも、不正行為ではない)ことを意味します。フィールドイニシャライザの両方にコンストラクタが割り当てた値を持つことで、ここで競合することはありません。

でも、readonlyはうそであり、うまくプレイすれば強制されます。 C#言語仕様に従って、

3

10.5.2項読み取り専用フィールドフィールド宣言が読み取り専用修飾子を含む、宣言によって導入されたフィールドは 読み取り専用フィールドです。 readonlyフィールドへの直接割り当ては、その宣言の一部として 、または同じクラスのインスタンスコンストラクタまたは静的 コンストラクタでのみ発生します。 (読み取り専用フィールドは、これらのコンテキストで 複数回に割り当てることができる。)具体的には、 読み取り専用フィールドに直接割り当てのみが許可され、次のコンテキストで:フィールドを導入する可変宣言において

  • (BY宣言に変数初期化子を含む)。
  • インスタンスフィールドの場合、フィールド宣言を含むクラスのインスタンスコンストラクタ。静的フィールドの場合、フィールド宣言を含むクラスの静的 コンストラクタに格納されます。これらの は、readonly フィールドをoutまたはrefパラメータとして渡すことが有効な唯一のコンテキストです。

だから基本的に、あなたはコンストラクタで読み取り専用フィールドを初期化することができます。

関連する問題