Heim > Backend-Entwicklung > C++ > Wie kann ich feststellen, ob eine Klasse von einer generischen Klasse in .NET erbt?

Wie kann ich feststellen, ob eine Klasse von einer generischen Klasse in .NET erbt?

DDD
Freigeben: 2025-01-24 18:51:10
Original
929 Leute haben es durchsucht

How Can I Determine if a Class Inherits from a Generic Class in .NET?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage