Heim >Backend-Entwicklung >C++ >Wie kann ich feststellen, ob eine Klasse von einer generischen Klasse in .NET erbt?
Identifizieren der Vererbung von generischen Klassen in .NET
Der Vererbungsmechanismus von .NET ermöglicht es Klassen, die Funktionalität von Basisklassen zu erweitern. Generische Klassen erhöhen die Komplexität bei der Bestimmung der Vererbung, insbesondere beim Umgang mit Type
-Objekten. Die Standardmethode IsSubclassOf
reicht nicht aus, wenn die Basisklasse generisch ist.
Die Herausforderung:
Betrachten Sie dieses Beispiel:
<code class="language-csharp">public class GenericClass<T> : IGenericInterface<T> { } public class TestClass : GenericClass<string> { }</code>
Eine einfache Überprüfung von typeof(TestClass).IsSubclassOf(typeof(GenericClass<string>))
funktioniert nicht, da typeof(GenericClass<string>)
ein geschlossener generischer Typ und nicht die generische Typdefinition ist.
Die Lösung:
Die folgende Hilfsfunktion bestimmt effektiv, ob ein Typ von einer rohen generischen Typdefinition erbt:
<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type genericType, Type toCheck) { while (toCheck != null && toCheck != typeof(object)) { Type currentType = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck; if (genericType == currentType) { return true; } toCheck = toCheck.BaseType; } return false; }</code>
Diese Funktion durchläuft die Basistypen von toCheck
, bis sie object
erreicht. Für jeden Typ wird geprüft, ob es sich um einen generischen Typ handelt. Wenn ja, wird die generische Typdefinition mit GetGenericTypeDefinition()
abgerufen. Die Funktion vergleicht dann diese rohe generische Typdefinition mit dem bereitgestellten genericType
. Eine Übereinstimmung bestätigt die Vererbung vom rohen generischen Typ.
Dieser Ansatz identifiziert die Vererbung von generischen Klassen korrekt und überwindet die Einschränkungen der Standardmethode IsSubclassOf
in diesem Szenario. Mit dieser Funktion können Sie zuverlässig bestimmen, ob ein Type
-Objekt eine von einer bestimmten generischen Klasse abgeleitete Klasse darstellt.
Das obige ist der detaillierte Inhalt vonWie kann ich feststellen, ob eine Klasse von einer generischen Klasse in .NET erbt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!