25

これは簡単な答えになる可能性が高く、何かが欠けているだけですが、ここに行きます...タイプがある場合(つまり、実際のSystem.Type ...インスタンスではありません)、別の特定の基本型から継承しますか?

4

3 に答える 3

32

System.TypeクラスのIsSubclassOfメソッドを使用します。

于 2008-09-24T19:24:59.177 に答える
23

との間で明確にするべきことが 1 つType.IsSubTypeOf()ありType.IsAssignableFrom()ます。

  • IsSubType()true指定された型が指定された型から派生した場合にのみ返されます。指定されたタイプfalseが指定されたタイプである場合に返さ れます。

  • IsAssignableFrom()true指定された型が指定された型であるか、指定された型から派生したものであるかどうかを返します。

したがって、これらを使用してBaseClassand DerivedClass(から継承BaseClass) を比較する場合:

BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE

DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
于 2009-01-30T17:26:30.453 に答える
22

編集:あなたが探している基本タイプがインターフェースである場合、上記の解決策は失敗することに注意してください。次のソリューションは、クラスであれインターフェイスであれ、あらゆるタイプの継承に対して機能します。

// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
    return baseType.IsAssignableFrom(type)
}

(半) MSDNの記事からの役立つ抜粋:

[引数]と現在のタイプが同じタイプを表す場合、現在のタイプが[引数]の継承階層にある場合、または現在のタイプが[引数]が実装するインターフェイスである場合、または[引数]は汎用型パラメーターであり、現在の型は[引数]の制約の1つを表します。これらの条件のいずれも真でない場合、または[引数]がnull参照(Visual BasicではNothing)の場合はfalse。

于 2008-09-24T19:24:05.357 に答える