web-dev-qa-db-ja.com

クラスがインスタンス化せずに別のクラスを継承するかどうかを確認する方法は?

次のようなクラスがあるとします:

class Derived : // some inheritance stuff here
{
}

私のコードで次のようなものをチェックしたい:

Derived is SomeType;

ただし、is演算子は、Dervied自体ではなく、Dervied型の変数である必要があります。 Derived型のオブジェクトを作成したくありません。
Derivedがインスタンス化せずにSomeTypeを継承することを確認するにはどうすればよいですか?

P.S。それが役立つ場合は、whereキーワードがジェネリックで行うようなものが必要です。
EDIT:
this answerに似ていますが、オブジェクトをチェックしています。クラス自体を確認したい。

122
atoMerz

割り当て可能性を確認するには、 Type.IsAssignableFrom メソッドを使用できます。

typeof(SomeType).IsAssignableFrom(typeof(Derived))

これは、型の平等、継承関係、およびインターフェイス実装で期待どおりに機能しますが、明示的/暗黙的な「割り当て可能性」を探している場合はnot変換演算子。

厳密な継承を確認するには、 Type.IsSubclassOf を使用できます。

typeof(Derived).IsSubclassOf(typeof(SomeType))
256
Ani

これを試して

typeof(IFoo).IsAssignableFrom(typeof(BarClass));

これにより、BarClass(Derived)IFoo(SomeType)を実装しているかどうかがわかります。

19
Haris Hasan