Heim >Backend-Entwicklung >C++ >Wie kann ich feststellen, ob eine Klasse von einer generischen Klasse in C#abgeleitet ist?
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!