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
878 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
typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
Nach dem Login kopieren

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

typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
Nach dem Login kopieren

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

Type.IsAssignableFrom:

typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true
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:

typeof(BaseClass).IsAssignableFrom(typeof(int[])); // 返回 true
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:

// 无法编译:
SubClass is BaseClass

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

Benutzerdefinierte Methode:

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

public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
{
    return potentialDescendant.IsSubclassOf(potentialBase)
        || potentialDescendant == potentialBase;
}
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!

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage