質問

ジェネラコディセタグプレ

Bussの静的フィールドへの参照がBusの静的コンストラクターをトリガーするようにこれを機能させる方法について何かアイデアはありますか?

役に立ちましたか?

解決

これがあなたにとって重要であるという事実は、おそらく静的コンストラクターを間違って使用していることを意味します。

それを念頭に置いて、Bussの静的コンストラクターを手動で呼び出すBusの静的コンストラクターを作成できます。静的コンストラクターを複数回実行することはできないことに注意してください。

他のヒント

MSDNによると静的コンストラクターは継承されません。これも継承されない静的フィールドに似ていると思います。

ジェネリック型の静的コンストラクターは、その型が参照されるときに、Typeごとに1回だけ呼び出されます。

Buss x = new Buss()を呼び出すと、Bus<Buss>の静的コンストラクターが呼び出されます。

Bus<Buss> x = new Bus<Buss>()を呼び出すと、Bus<Buss>の静的コンストラクターも呼び出されますが、その型引数Bussに対して呼び出され、Buss.fieldが設定されます。

class Bugs : Bus<Buss>を作成する場合、Bugs.fieldを設定することはありません。これは、基本クラスBussの静的コンストラクターを呼び出してBus<Buss>を設定する型引数Buss.fieldを最初に解決するためです。 Bugs基本クラスの静的コンストラクターを呼び出そうとすると、静的Bus<Buss>コンストラクターが既に呼び出されていると見なされ、スキップされます。

基本的に、コードをコピーして貼り付け、ダミーのArgumentクラスを作成し、Bussの新しいインスタンスを作成すると、静的コンストラクターが呼び出され、Buss.fieldがインスタンスに設定されます。 Argumentの、しかし私はここでいくつかの奇妙な振る舞いを認識しています。そこでは、静的メソッドからの反射を使用してサブクラスの静的に到達しないようにアドバイスする必要があります。

提供した例は、Bussがそれ自体の型引数であるためにのみ機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top