2013-05-04 22 views
8

静的コンストラクタを持つクラスがあります。メンバを呼び出さずに静的コンストラクタを呼び出す方法

私は静的コンストラクタを呼び出したり、そのメンバを使用せずに、コンストラクタがまだ呼び出されていない場合にのみ呼び出すようにします。

私は反射を使用してみました。私は静的なコンストラクタを何度も呼び出すことができますが、以前に呼び出されたかどうかはわかりません。

どうすればよいですか?

EDIT
これは私が話していONEクラスだけではない、それはより多くの可能性があります。すべてのクラスに特別な属性が設定されているとします。

+1

を(...私が正しくあなたがしようとしていたものを理解することを仮定して)RuntimeHelpers.RunClassConstructorメソッドを使用することができます。静的な状態を設定する場合は、静的なコンストラクタを実行する必要があるだけなので、その状態を設定し、コンストラクタが再度実行された場合に設定されているかどうかを確認してください。 –

+0

@Robert:私はジェネリックソリューションである必要があります。私は、いくつのクラスとどのクラスを事前に知っていません。彼がコンストラクタを呼び出すときに.NETがそのフラグを設定しないので、それは助けにならないでしょう。 –

+0

あなたは今私が好奇心を持っています。とにかくやっていることがあれば、メンバーが呼び出される前にコンストラクタ*を実行する必要があるのはなぜですか? (静的コンストラクタは、最初のメソッドまたはプロパティの呼び出しを実行する直前に呼び出されます。静的な状態は、最初のメソッドまたはプロパティに触れるまでは関係ありません)。 –

答えて

24

あなたはフラグを設定し

RuntimeHelpers.RunClassConstructor(typeof(YourType).TypeHandle); 
+0

コンストラクタは1回だけ実行されますか? –

+1

@RobertHarveyはい、静的コンストラクターは、複数回呼び出しても1回だけ実行されます。 –

+1

うん、今チェックしたところ、これはうまくいくようだ。 –

関連する問題