Heim > Backend-Entwicklung > C++ > Wie kann ich feststellen, ob ein Typ eine generische Basisklasse in C#erbt?

Wie kann ich feststellen, ob ein Typ eine generische Basisklasse in C#erbt?

Patricia Arquette
Freigeben: 2025-01-24 19:06:10
Original
592 Leute haben es durchsucht

How Can I Determine if a Type Inherits from a Generic Base Class in C#?

Erkennen Sie, ob ein Typ in C# von einer generischen Basisklasse erbt

Bei der Programmierung ist es oft notwendig, die Beziehungen zwischen Klassen zu bestimmen (insbesondere wenn es um Vererbung geht). Beim Umgang mit generischen Klassen mit Typparametern kann die Validierung der Vererbung über Standardmethoden jedoch schwierig sein.

Frage:

Angenommen, Sie haben die folgenden generischen und abgeleiteten Klassen:

<code class="language-csharp">public class GenericClass<T> : GenericInterface<T>
{
}

public class Test : GenericClass<SomeType>
{
}</code>
Nach dem Login kopieren

Sie möchten überprüfen, ob ein bestimmtes Type-Objekt (z. B. typeof(Test)) einen von GenericClass geerbten Typ darstellt. Die Verwendung von typeof(Test).IsSubclassOf(typeof(GenericClass)) schlägt jedoch fehl, da die generischen Typparameter nicht berücksichtigt werden.

Lösung:

Um dieses Problem zu lösen, können Sie den folgenden Code verwenden, um zu bestimmen, ob der Typ von der generischen Basisklasse abgeleitet ist:

<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (generic == cur) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
Nach dem Login kopieren

Diese Methode bestimmt, ob toCheck direkt oder indirekt von generic erbt, indem sie die Vererbungskette durchläuft und die Basistypen vergleicht. Es verarbeitet nicht-generische und generische Typen, indem es das Vorhandensein des IsGenericType-Attributs prüft und die Definition des generischen Typs abruft.

Mit diesem Ansatz können Sie unabhängig von den angegebenen Typparametern genau bestimmen, ob ein Typ von einer generischen Basisklasse abgeleitet ist.

Anwendungsbeispiel:

<code class="language-csharp">bool result = IsSubclassOfRawGeneric(typeof(GenericClass<>), typeof(Test)); // result will be true</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich feststellen, ob ein Typ eine generische Basisklasse in C#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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage