C#で基底クラスの静的メソッドから、メソッドを実行している派生クラスの型を知りたかった

 C#で基底クラスとその派生クラスがある。基底クラスに定義した静的メソッドを派生クラスのインスタンスで実行したとき、静的メソッド内で派生クラスの型情報を得たかった。それが無理だったやり方のメモ。成功したやり方は後日の記事であらためて。

 なんで型が欲しかったかっていうと、リフレクションをしたかったから。そんなところで、下記コードを書いた。BaseClassのメソッド内でthisがあるが、これはもちろん静的メソッド内なので使えない。ここが問題となった。

class Program

{
static void Main(string[] args)
{
AClass.GetDerivedType();
}
}

public class AClass : BaseClass
{
}

public abstract class BaseClass
{
public static void GetDerivedType()
{
var t = typeof(this);
Console.WriteLine(t);
}
}

静的メソッド内ではthisを使えない。じゃあどうする?BaseClassをthisの代わりに入れたら、派生クラスで実行しても得られるのはBaseClassになってしまう。この静的メソッドの定義を基底クラスでやるのやめる?派生クラスでいちいちこのメソッドの定義書いていくのはナンセンスだと思う。派生クラスを指してくれるキーワードあったっけ…たぶんない。スタックオーバーフローでも無理だと書かれていた。
Get derived type from static method

 じゃあどうするの、ジェネリックを使うのというのを次回に。
comment: 0