これは簡単な答えになる可能性が高く、何かが欠けているだけですが、ここに行きます...タイプがある場合(つまり、実際のSystem.Type ...インスタンスではありません)、別の特定の基本型から継承しますか?
3 に答える
System.TypeクラスのIsSubclassOfメソッドを使用します。
との間で明確にするべきことが 1 つType.IsSubTypeOf()
ありType.IsAssignableFrom()
ます。
IsSubType()
true
指定された型が指定された型から派生した場合にのみ返されます。指定されたタイプfalse
が指定されたタイプである場合に返さ れます。IsAssignableFrom()
true
指定された型が指定された型であるか、指定された型から派生したものであるかどうかを返します。
したがって、これらを使用してBaseClass
and 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
編集:あなたが探している基本タイプがインターフェースである場合、上記の解決策は失敗することに注意してください。次のソリューションは、クラスであれインターフェイスであれ、あらゆるタイプの継承に対して機能します。
// 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。