Downcasting ist unbeliebt, vielleicht ein Codegeruch
Ich stimme dir nicht zu. Downcasting ist sehr beliebt ; Eine große Anzahl realer Programme enthält einen oder mehrere Downcasts. Und es ist vielleicht kein Codegeruch . Es ist definitiv ein Codegeruch. Aus diesem Grund muss der Downcasting-Vorgang im Programmtext enthalten sein . Es ist so, dass Sie den Geruch leichter bemerken und die Aufmerksamkeit der Code-Überprüfung darauf richten können.
unter welchen umständen ist es angebracht, code zu schreiben, der downcasts?
In allen Fällen, in denen:
- Sie verfügen über eine 100% korrekte Kenntnis eines Fakts über den Laufzeittyp eines Ausdrucks, der spezifischer ist als der Typ des Ausdrucks zur Kompilierungszeit
- Sie müssen diese Tatsache ausnutzen, um eine Funktion des Objekts zu verwenden, die für den Kompilierungstyp nicht verfügbar ist
- Es ist ein besserer Zeit- und Arbeitsaufwand, die Besetzung zu schreiben, als das Programm zu überarbeiten, um einen der ersten beiden Punkte zu eliminieren.
Wenn Sie ein Programm kostengünstig umgestalten können, so dass entweder der Laufzeit-Typ vom Compiler abgeleitet werden kann, oder das Programm umgestalten können, damit Sie nicht die Fähigkeit des weiter abgeleiteten Typs benötigen, dann tun Sie dies. Downcasts wurden zu der Sprache hinzugefügt, wenn es schwierig und teuer ist , das Programm so umzugestalten.
warum wird downcasting von der sprache unterstützt?
C # wurde von pragmatischen Programmierern erfunden, die Jobs zu erledigen haben, für pragmatische Programmierer, die Jobs zu erledigen haben. Die C # -Designer sind keine OO-Puristen. Und das C # -System ist nicht perfekt; Designbedingt werden die Einschränkungen, die für den Laufzeittyp einer Variablen gelten können, unterschätzt.
Downcasting ist auch in C # sehr sicher. Wir haben eine starke Garantie, dass der Downcast zur Laufzeit überprüft wird. Wenn dies nicht möglich ist, wird das Programm das Richtige tun und stürzt ab. Das ist wunderbar; Wenn sich herausstellt, dass Ihr 100% korrektes Verständnis der Typensemantik zu 99,99% korrekt ist, funktioniert Ihr Programm zu 99,99% und stürzt den Rest der Zeit ab, anstatt sich unvorhersehbar zu verhalten und Benutzerdaten in 0,01% der Fälle zu beschädigen .
ÜBUNG: Es gibt mindestens eine Möglichkeit, in C # einen Downcast zu erstellen, ohne einen expliziten Umwandlungsoperator zu verwenden. Können Sie sich solche Szenarien vorstellen? Da es sich auch um potenzielle Code-Gerüche handelt, welche Designfaktoren sind Ihrer Meinung nach für das Design eines Features verantwortlich, das einen Absturz nach unten verursachen kann, ohne dass eine Manifestierung im Code vorgenommen wird?