次のようなクラスがあるとします:
class Derived : // some inheritance stuff here
{
}
私のコードで次のようなものをチェックしたい:
Derived is SomeType;
ただし、is
演算子は、Dervied自体ではなく、Dervied型の変数である必要があります。 Derived型のオブジェクトを作成したくありません。
Derivedがインスタンス化せずにSomeType
を継承することを確認するにはどうすればよいですか?
P.S。それが役立つ場合は、where
キーワードがジェネリックで行うようなものが必要です。
EDIT:
this answerに似ていますが、オブジェクトをチェックしています。クラス自体を確認したい。
割り当て可能性を確認するには、 Type.IsAssignableFrom
メソッドを使用できます。
typeof(SomeType).IsAssignableFrom(typeof(Derived))
これは、型の平等、継承関係、およびインターフェイス実装で期待どおりに機能しますが、明示的/暗黙的な「割り当て可能性」を探している場合はnot変換演算子。
厳密な継承を確認するには、 Type.IsSubclassOf
を使用できます。
typeof(Derived).IsSubclassOf(typeof(SomeType))
これを試して
typeof(IFoo).IsAssignableFrom(typeof(BarClass));
これにより、BarClass(Derived)
がIFoo(SomeType)
を実装しているかどうかがわかります。