Eine effektive Methode in C#, um genau zu bestimmen, ob ein Typ ein Subtyp eines anderen Typs ist
Beim Umgang mit Typen in C# müssen Sie häufig die Beziehung zwischen Typen bestimmen. Ein häufiger Bedarf besteht darin, zu überprüfen, ob ein Typ eine Unterklasse eines anderen Typs ist, oder genauer gesagt, ein Untertyp dieser Klasse.
IsSubclassOf: Teilweise Wahrheit
Die MethodeType.IsSubclassOf
bietet eine Möglichkeit, direkt zu überprüfen, ob ein Typ eine Unterklasse eines anderen Typs ist:
typeof(SubClass).IsSubclassOf(typeof(BaseClass)); // 返回 true
Dieser Ansatz schlägt jedoch fehl, wenn die beiden Typen gleich sind:
typeof(BaseClass).IsSubclassOf(typeof(BaseClass)); // 返回 false
IsAssignableFrom: Breiter, aber nicht perfekt
DerType.IsAssignableFrom
-Ansatz löst dieses Problem, hat aber auch seine eigenen Nachteile. Während es genau anzeigt, dass eine Unterklasse oder derselbe Typ ein Untertyp ist, kann es auch falsch positive Ergebnisse für nicht verwandte Typen zurückgeben:
typeof(BaseClass).IsAssignableFrom(typeof(DerivedClass)); // 返回 true typeof(BaseClass).IsAssignableFrom(typeof(BaseClass)); // 返回 true typeof(int[]).IsAssignableFrom(typeof(uint[])); // 返回 true
ist und als: objektorientiert, aber mit Einschränkungen
Die Schlüsselwörteris
und as
können auch zur Typprüfung verwendet werden, sie wirken sich jedoch auf Objektinstanzen und nicht auf Typen selbst aus. Dies schränkt ihre Anwendbarkeit in der statischen Codeanalyse ein.
Fazit: Kombination von Methoden zur Verbesserung der Genauigkeit
Leider erfasst keine einzige integrierte Methode das Konzept der Subtypprüfung vollständig, ohne falsch positive Ergebnisse zu liefern oder Objektverweise zu erfordern. Am zuverlässigsten ist es, die Type.IsSubclassOf
-Methode mit einer expliziten Gleichheitsprüfung zu kombinieren:
bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant) { return potentialDescendant.IsSubclassOf(potentialBase) || potentialDescendant == potentialBase; }
Diese benutzerdefinierte Methode bietet eine präzise und genaue Möglichkeit, zu bestimmen, ob ein Typ ein Untertyp eines anderen Typs ist, einschließlich der Groß-/Kleinschreibung desselben Typs.
Das obige ist der detaillierte Inhalt vonWie kann ich in C# genau bestimmen, ob ein Typ ein Subtyp eines anderen ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!