Ich habe ein Programm, das eine schnelle Leistung erfordert. Innerhalb einer seiner inneren Schleifen muss ich den Typ eines Objekts testen, um festzustellen, ob es von einer bestimmten Schnittstelle erbt.
Eine Möglichkeit hierfür wäre die integrierte Typprüfungsfunktion der CLR. Die eleganteste Methode ist wahrscheinlich das Schlüsselwort 'is':
if (obj is ISpecialType)
Ein anderer Ansatz wäre, der Basisklasse meine eigene virtuelle GetType () -Funktion zu geben, die einen vordefinierten Aufzählungswert zurückgibt (in meinem Fall brauche ich eigentlich nur einen Bool). Diese Methode wäre schnell, aber weniger elegant.
Ich habe gehört, dass es eine IL-Anweisung speziell für das Schlüsselwort 'is' gibt, aber das bedeutet nicht, dass sie schnell ausgeführt wird, wenn sie in eine native Assembly übersetzt wird. Kann jemand einen Einblick in die Leistung von 'is' im Vergleich zur anderen Methode geben?
UPDATE: Danke für all die informierten Antworten! Es scheint, dass einige hilfreiche Punkte in den Antworten verteilt sind: Andrews Punkt über das automatische Durchführen einer Besetzung ist wichtig, aber die von Binary Worrier und Ian gesammelten Leistungsdaten sind auch äußerst nützlich. Es wäre großartig, wenn eine der Antworten so bearbeitet würde, dass sie alle diese Informationen enthält.