2016-08-04 8 views
2

メソッドのスコープ外で宣言しなければならない定数を必要としますが、メソッド内で値を割り当てることができます。その結果、値を代入する前にメソッド内の値をNULLチェックする必要がありますが、その時点で定数を定数にすることはできません。一度しか設定できないC#定数プロパティ

これを処理できるネイティブのC#修飾子はありませんか?そうでない場合、それは類似の言語で存在するのでしょうか?なぜそれがC#に存在しないのですか?

あり、ここで多少似てポストです:Is there a way of setting a property once only in C#

は、しかし、それは主に、唯一の方法Aの内側に設定することができ、クラスのフィールドを持つことは不可能であるゲッターとセッター

+0

[readonly](https://msdn.microsoft.com/en-us/library/acdd6hb7.aspx)プロパティ –

+0

「readonly」を見てみましょう。制約は、コンストラクタで値を代入できるということだけです。 – Kapol

+0

メソッドレベルの(C#では)これは不可能です。クラスレベルでのみ、あなたはそのようなことをすることができます。 –

答えて

0

でヌルチェックに焦点を当ててメソッドを指定します。

ただし、コンストラクタ内でのみ設定できるフィールドに対しては、これを制限できます。そのキーワードはreadonlyと呼ばれています。

5

値を遅延して初期化する場合は、Lazyインスタンスを使用します。これにより、コンストラクタのLazyインスタンスを設定できます。つまり、フィールドはreadonlyになりますが、オブジェクトを作成するメソッドは必要になるまで呼び出されず、一度しか値を初期化できません。

+0

誰かが再び 'new'キーワードを使用していない限り、 – user3185569

+1

@ user3185569それでも、そのフィールドを再び初期化していません。これはちょうど新しいインスタンスを作成することです。これは正確に 'readonly'フィールドから起こりたいものです。アプリケーションごとに1回ではなく、インスタンスごとに1回設定できます。後者が必要な場合は、単に静的にするだけです。 – Servy

関連する問題