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
Susan SarandonOriginal
2025-01-09 15:06:47759Durchsuche

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>

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>

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

Type.IsAssignableFrom:

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

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>

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>

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>

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!

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