何かを作成しようとしています。いくつかの基本クラスから派生したすべてのクラスは、ロード時に何らかの操作が実行されますが、プログラム。派生クラスを作る人が余分な作業をする必要がないようにしたいと思います。私の例では、子クラスが定義されているときに入力されたデリゲートを呼び出すOnInheritedAttribute()を作成しました。クラスで自動的に操作を実行し、一度だけ実行する方法
public class DelegateHolder
{
public bool Operation(Type t) { /*...*/ };
static OnInheritedAttributeDelegate d = new OnInheritedAttributeDelegate(Operation);
}
[OnInheritedAttribute(DelegateHolder.d)]
public abstract class AInheritable
{ /*...*/ }
//ideally, I could do this, and have the processing done
public class SubClassA : AInheritable
{ /*...*/ }
//which would have the same effect as this, no attribute were assigned to AInheritable
public class SubClassB : AInheritable
{
private static readonly bool _dummy = DelegateHolder.Operation(SubClassB);
}
私は第二の方法は、(アセンブリが複数回ロードされていない提供)私がやりたいだろう、ほぼ正だけど、呼び出すために必要なAInheritableのすべてのサブクラスを持つことが本当に迷惑だろうようにそれはそうこのコード。
別のオプションは、
public class BaseClass
{
static bool initialized; //this may not work, it will probably make one value for all classes rather than each subclass.
public BaseClass()
{
if(!/*System.Reflection code to get static member initialized from class of (this)*/)
{
/*perform registration*/
/*System.Reflection code to get static member initialized from class of (this)*/ = true;
}
}
}
かもしれません。しかし多数のオブジェクトを作成しようとしている場合、これは不格好な、と無駄なようです。
これを合理化するためのアドバイスはありますか?
これを理解してください - クラスのすべてのインスタンスで初期化コードを実行しますか?または、ロードされたすべてのタイプに対してコードを一度実行したいですか?いずれにしても、コンストラクタまたは静的コンストラクタのいずれかを探していますか? – Ani
@ananthonline:彼は継承されている静的なイニシャライザを望んでいるようです。 – Guvante
はい、私が望むものは、継承された静的初期化子と同等です。私はそれがまだ初期化されているかどうかを確認するために、すべての初期化ルーチンで余分なロジックを持つことを避けたいと思います。 –