Heim >Backend-Entwicklung >C++ >Wie kann ich in C# zuverlässig auf Unterklassenbeziehungen prüfen, einschließlich Selbsttypvergleichen?
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
:
<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!