.NET Core - Type.IsAssignableFromのメモ
Type.IsAssignableFromは「メソッドを呼び出すインスタンス型の変数」に「メソッドの引数で指定した型のインスタンス」を割り当てることができるかどうかを判断します。
このメソッドはあるインターフェイスを実装しているか?あるクラスを派生しているか?をリフレクションで調べるときに使うと思いますが、文章で説明されてもすんなり頭に入ってこないですね。
たまに使うとどっちがどっちか忘れてるというか考えることが多いのでサンプルを残しておきます。
class Base { } interface IInterface { } class Derived : Base, IInterface { } var baseType = typeof(Base); var derivedType = typeof(Derived); var interfaceType = typeof(IInterface); // Base型の変数にDerived型のインスタンスを割り当てることができる Assert.True(baseType.IsAssignableFrom(derivedType)); // Derived型の変数にBase型のインスタンスを割り当てることができない Assert.False(derivedType.IsAssignableFrom(baseType)); // Base型の変数にBase型のインスタンスを割り当てることができる Assert.True(baseType.IsAssignableFrom(baseType)); // IInterface型の変数にDerived型のインスタンスを割り当てることができる Assert.True(interfaceType.IsAssignableFrom(derivedType));
ちなみにあるクラスを派生してるかの判断だけでよければ(インターフェイスの実装は判断しなくてよければ)Type.IsSubclassOfでもよさげです。
// DerivedはBaseのサブクラスである Assert.True(derivedType.IsSubclassOf(baseType)); // BaseはDerivedのサブクラスではない Assert.False(baseType.IsSubclassOf(derivedType)); // Derived(インターフェイスの実装)はIInterfaceのサブクラスではない Assert.False(derivedType.IsSubclassOf(interfaceType));