Heim > Backend-Entwicklung > C++ > Wie kann ich in C# zuverlässig auf Unterklassenbeziehungen prüfen, einschließlich Selbsttypvergleichen?

Wie kann ich in C# zuverlässig auf Unterklassenbeziehungen prüfen, einschließlich Selbsttypvergleichen?

Susan Sarandon
Freigeben: 2025-01-09 15:06:47
Original
812 Leute haben es durchsucht

How Can I Reliably Check for Subclass Relationships in C# Including Self-Type Comparisons?

Unterklassenbeziehungen in C# zuverlässig überprüfen, einschließlich Selbsttypvergleichen

Um festzustellen, ob ein Typ eine Unterklasse eines anderen Typs in C# ist, können Sie IsSubclassOf:

verwenden
<code class="language-csharp">typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true</code>
Nach dem Login kopieren

Dieser Ansatz schlägt jedoch fehl, wenn die Unterklassenbeziehung zwischen dem Typ und sich selbst überprüft wird:

<code class="language-csharp">typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false</code>
Nach dem Login kopieren

Um diese Einschränkung zu umgehen, gibt es mehrere Optionen:

Type.IsAssignableFrom:

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true</code>
Nach dem Login kopieren

Während diese Methode für Unterklassen „true“ zurückgibt, liefert sie auch falsch positive Ergebnisse für nicht verwandte Typen, zum Beispiel:

<code class="language-csharp">typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true</code>
Nach dem Login kopieren

is and as (Objektoperationen):

Diese Operatoren erfordern Objekte anstelle von Typobjekten und können nicht zum Vergleichen von Typdefinitionen verwendet werden:

<code class="language-csharp">// 无法编译:
SubClass is BaseClass

// 无法编译:
typeof(SubClass) is typeof(BaseClass)</code>
Nach dem Login kopieren

Benutzerdefinierte Methode:

Um die Unterklassenbeziehung genau zu überprüfen, können Sie eine Hilfsmethode erstellen:

<code class="language-csharp">public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase)
        || potentialDescendant == potentialBase;
}</code>
Nach dem Login kopieren

Diese Methode verarbeitet Unterklassen und Gleichheitsvergleiche korrekt.

Das obige ist der detaillierte Inhalt vonWie kann ich in C# zuverlässig auf Unterklassenbeziehungen prüfen, einschließlich Selbsttypvergleichen?. 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