…において、開いたジェネリック型を使って継承関係をさらさらっと探索するのはどうも無理っぽい。つまり、
public class A<TA> { }
public class B<TB> : A<TB> { }
var a = typeof(A<>);
var b = typeof(B<>);
とあるとき、b.IsAssignableFrom(a) とか b.IsSubclassOf(a) は false となる。当然の挙動っぽい気も微妙にしないでもない?し、おかしい挙動なのかもしれない?けど、出来て欲しかったなあという気分。
typeof(A<>) みたいな感じで開いたジェネリック型のオブジェクトが取れるというのは面白いネタだけど一般的ではないようなのでたまーに宣伝したりしてます。
結局、次善策は b.BaseType.GetGenericTypeDefinition() == a となると思われる。これだと 1 つ上の親クラスしか見れないし、なんだかなあ、といった感じ。
ちなみに、恐らくこの記事がこの blog で初めてのプログラミングネタかと思われます。頑張ってこれからもネタ増やしていくので生暖かくこのジログを見守って頂ければこれ幸い。