オブジェクトを構成するとき、初期化順序は次の通りです:
1.フィールドにはデフォルト値が与えられます。数値の場合 "0"が与えられます)
2.コンストラクタが呼び出されます。パラメータのないコンストラクタがある場合、プライベートフィールドをパラメータで初期化する方法はありますか? (私は、フィールドが既にデフォルト値で初期化されていると仮定します。なぜなら、それらは "readonly"なので、一度値が与えられると、その値は後で変更されるべきではないからです)。
私が間違っている場合は私を修正してください。オブジェクトのフィールドのためのc#のreadonlyキーワード
-5
A
答えて
3
単純に:readonly
は、建設後に設定できない(少なくとも、不正行為ではない)ことを意味します。フィールドイニシャライザとの両方にコンストラクタが割り当てた値を持つことで、ここで競合することはありません。
でも、readonly
はうそであり、うまくプレイすれば強制されます。 C#言語仕様に従って、
3
:
10.5.2項読み取り専用フィールドフィールド宣言が読み取り専用修飾子を含む、宣言によって導入されたフィールドは 読み取り専用フィールドです。 readonlyフィールドへの直接割り当ては、その宣言の一部として 、または同じクラスのインスタンスコンストラクタまたは静的 コンストラクタでのみ発生します。 (読み取り専用フィールドは、これらのコンテキストで 複数回に割り当てることができる。)具体的には、 読み取り専用フィールドに直接割り当てのみが許可され、次のコンテキストで:フィールドを導入する可変宣言において
- (BY宣言に変数初期化子を含む)。
- インスタンスフィールドの場合、フィールド宣言を含むクラスのインスタンスコンストラクタ。静的フィールドの場合、フィールド宣言を含むクラスの静的 コンストラクタに格納されます。これらの は、readonly フィールドをoutまたはrefパラメータとして渡すことが有効な唯一のコンテキストです。
だから基本的に、あなたはコンストラクタで読み取り専用フィールドを初期化することができます。
関連する問題
- 1. C#保護されたreadonly autopropertyと取得アクセサーと保護されたreadonlyフィールド
- 2. Uniqueidentifierフィールドを含めるためのキーワード検索
- 3. Django管理インターフェースのフィールドのReadonlyメソッドは、
- 4. Readonlyオブジェクトとマルチスレッド
- 5. C#のオブジェクト、パラメータ、およびrefキーワード
- 6. 柔軟性のためのC++自動キーワード
- 7. DocumentオブジェクトのためのライブラリのC#
- 8. JSONオブジェクトのParamsキーワード
- 9. C#readonly vs Java final
- 10. ReadOnly C#クラスの参照変数
- 11. 基本クラスのstatic readonlyフィールドへの割り当て
- 12. 別のキーワードの後ろにキーワードの出現のためのJava正規表現
- 13. このキーワードはc#
- 14. Typescriptオブジェクトのリテラル "this"キーワード
- 15. C#のEnumerationで予約されたキーワード
- 16. パブリックreadonlyフィールドv.s.取得専用プロパティ
- 17. C#のvarキーワードの使用
- 18. C#、Linqのこのキーワード?
- 19. 部分ビューのアクションに基づくASP.NET MVC Readonlyフィールド
- 20. Readonly入力フィールドはIE6のOnKeyPressを起動しません
- 21. C#のエラー:「オブジェクト参照が非静的フィールド、メソッド、またはプロパティのために必要とされる」
- 22. オブジェクト指向のCプログラミング - 'this'キーワードに相当しますか?
- 23. Symfony3:オブジェクトの配列で埋められた選択型フィールド
- 24. c#データベースの永続性のためのオブジェクトの等価性
- 25. Visual C++標準ライブラリのキーワード
- 26. C# "is"キーワードの使用パターン
- 27. C#の 'using'キーワードをF#
- 28. ユーザー定義オブジェクトへのポインタのためのC++アトミック
- 29. readonlyプロパティへのデータバインド
- 30. jwysiwygエディタのReadOnlyコンテンツ
質問が不明です。 int type {get;}の代わりに[mcve] – UnholySheep
int type = 0を使用して説明してください。セット; } – jdweng
おそらくここでもう一度読むことができます[C#MSDN読み取り専用プロパティ](https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/readonly)もう一度.. 'Good Luck ' – MethodMan