Heim >Backend-Entwicklung >C++ >Wie kann ich feststellen, ob eine Klasse von einer generischen Klasse in C#abgeleitet ist?

Wie kann ich feststellen, ob eine Klasse von einer generischen Klasse in C#abgeleitet ist?

Susan Sarandon
Susan SarandonOriginal
2025-01-24 18:47:09712Durchsuche

How Can I Determine if a Class Is Derived from a Generic Class in C#?

Identifizieren der Vererbung aus einer generischen Klasse in C#

Objektorientierte Programmierung nutzt Klassenvererbung, um hierarchische Beziehungen zu erstellen. Die generischen Klassen von C# führen bei der Bestimmung der Vererbung zu einer höheren Komplexität. In diesem Artikel geht es um die Herausforderung, zu überprüfen, ob eine Klasse von einer generischen Klasse abgeleitet ist.

Ein üblicher Ansatz, bei dem IsSubclassOf direkt auf die generische Typdefinition angewendet wird, schlägt fehl. Die Lösung liegt in der Verwendung einer benutzerdefinierten Methode, IsSubclassOfRawGeneric, die generische Typvergleiche effektiv durchführt.

Hier ist die Lösung:

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

Diese Funktion durchläuft die Vererbungskette von toCheck (dem Typ, der überprüft wird). Für jeden Typ wird die generische Typdefinition mit GetGenericTypeDefinition() abgerufen, wenn der Typ generisch ist. andernfalls wird der Typ selbst verwendet. Die Funktion vergleicht dies dann mit generic (der generischen Typdefinition, gegen die geprüft werden soll). Eine Übereinstimmung zeigt eine Vererbung von der angegebenen generischen Klasse an.

Diese Methode bietet eine robuste Lösung zur Bestimmung, ob eine Klasse von einer generischen Klasse in C# erbt, und überwindet so die Einschränkungen der Standardmethode IsSubclassOf in diesem speziellen Szenario.

Das obige ist der detaillierte Inhalt vonWie kann ich feststellen, ob eine Klasse von einer generischen Klasse in C#abgeleitet ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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