基底クラスの静的メソッドから派生クラスの型を取得する 質問する

基底クラスの静的メソッドから派生クラスの型を取得する 質問する

基本クラスの静的メソッドから派生クラスの型を取得したいと思います。

これはどうすれば実現できるのでしょうか?

ありがとう!

class BaseClass {
  static void Ping () {
     Type t = this.GetType(); // should be DerivedClass, but it is not possible with a static method
  }
}
class DerivedClass : BaseClass {}

// somewhere in the code
DerivedClass.Ping();

ベストアンサー1

これは、奇妙に繰り返されるテンプレートパターン

class BaseClass<T>
    where T : BaseClass<T>
{
    static void SomeMethod() {
        var t = typeof(T);  // gets type of derived class
    }
}

class DerivedClass : BaseClass<DerivedClass> {}

メソッドを呼び出します:

DerivedClass.SomeMethod();

このソリューションでは、基本クラスを派生クラスでテンプレート化する必要があるため、定型的なオーバーヘッドが少し追加されます。

継承ツリーが 2 つ以上のレベルを持つ場合も制限があります。この場合、静的メソッドの呼び出しに関して、テンプレート引数を渡すか、現在の型をその子に適用するかを選択する必要があります。

テンプレートとは、もちろんジェネリックを意味します。

おすすめ記事