Wie bestimmen Sie, ob eine gegebene Art (System.Type) von einer bestimmten Basisklasse erbt (in .NET)?
-
02-07-2019 - |
Frage
Das wird wahrscheinlich eine einfache Antwort sein, und ich bin nur etwas fehlt, aber hier geht ... Wenn ich einen Typ haben, (das heißt, eine tatsächliche System.Type ... keine Instanz) wie tun ich sage, wenn es von einem anderen bestimmten Basistyp erbt?
Lösung
Mit der IsSubclassOf Methode der System.Type Klasse.
Andere Tipps
Eine Sache zu klären zwischen Type.IsSubTypeOf()
und Type.IsAssignableFrom()
:
-
IsSubType()
kehrttrue
nur, wenn der angegebene Typ abgeleitet ist der angegebene Typ. Es wird wiederfalse
, wenn der angegebene Typ der angegebene Typ. -
IsAssignableFrom()
kehrttrue
, wenn der angegebene Typ ist entweder der Typ oder abgeleitet von dem angegebenen Typ angegeben.
Also, wenn Sie verwenden diese BaseClass
und DerivedClass
(die von BaseClass
erbt) zu vergleichen, dann:
BaseClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = FALSE
BaseClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsSubTypeOf(GetType(BaseClass)) = TRUE
DerivedClassInstance.GetType.IsAssignableFrom(GetType(BaseClass)) = TRUE
EDIT: Beachten Sie, dass die oben genannte Lösung wird scheitern, wenn der Basistyp Sie suchen, eine Schnittstelle. Die folgende Lösung wird für jede Art von Vererbung arbeiten, sei es Klasse oder Schnittstelle.
// Returns true if "type" inherits from "baseType"
public static bool Inherits(Type type, Type baseType) {
return baseType.IsAssignableFrom(type)
}
(Semi) Hilfreiche Auszug aus dem MSDN Artikel:
true, wenn [das Argument] und die aktuelle Type repräsentieren die gleiche Art, oder wenn der aktuelle Typ in der Vererbungshierarchie ist [Argument], oder wenn der aktuelle Typ ist eine Schnittstelle, die [das Argument] implementiert, oder wenn [das Argument] ist ein generischer Typ-Parameter und die aktuelle Type stellt eine der Beschränkungen des [Arguments]. false, wenn keine dieser Bedingungen erfüllt ist, oder wenn [das Argument] ist ein NULL-Verweis (Nothing in Visual Basic).