Downcasting jest niepopularny, może zapach kodu
Nie zgadzam się. Downcasting jest niezwykle popularny ; ogromna liczba programów w świecie rzeczywistym zawiera co najmniej jeden problem. I to może nie jest zapach kodu. To zdecydowanie zapach kodu. Dlatego operacja downcastingu musi być zamanifestowana w tekście programu . Dzięki temu łatwiej jest zauważyć zapach i poświęcić mu uwagę na przeglądanie kodu.
w jakich okolicznościach należy napisać kod, który nie działa?
W każdych okolicznościach, gdy:
- masz w 100% poprawną wiedzę o fakcie dotyczącym typu środowiska wykonawczego wyrażenia, które jest bardziej szczegółowe niż typ wyrażenia w czasie kompilacji, oraz
- musisz skorzystać z tego faktu, aby skorzystać z możliwości obiektu niedostępnego w typie kompilacji oraz
- lepsze wykorzystanie czasu i wysiłku na napisanie obsady, niż refaktoryzacja programu w celu wyeliminowania jednego z dwóch pierwszych punktów.
Jeśli możesz tanio refaktoryzować program, tak aby kompilator mógł wydedukować typ środowiska wykonawczego, lub refaktoryzować program, aby nie trzeba było możliwości bardziej pochodnego typu, zrób to. Do języka dodano downcasty w tych okolicznościach, w których refaktoryzacja programu jest trudna i droga .
dlaczego język obsługuje downcasting?
C # został wymyślony przez pragmatycznych programistów, którzy mają zadania do wykonania, dla pragmatycznych programistów, którzy mają zadania do wykonania. Projektanci C # nie są purystami OO. A system typu C # nie jest idealny; z założenia nie docenia ograniczeń, które można nałożyć na typ środowiska wykonawczego zmiennej.
Również downcasting jest bardzo bezpieczny w C #. Mamy silną gwarancję, że downcast zostanie zweryfikowany w czasie wykonywania, a jeśli nie będzie można go zweryfikować, program wykona właściwą czynność i ulegnie awarii. To jest cudowne; oznacza to, że jeśli twoje 100% poprawne zrozumienie semantyki typów okaże się 99,99% poprawne, to twój program działa przez 99,99% czasu i zawiesza resztę czasu, zamiast zachowywać się nieprzewidywalnie i uszkadzać dane użytkownika 0,01% czasu .
ĆWICZENIE: Istnieje co najmniej jeden sposób na utworzenie downcastu w języku C # bez użycia jawnego operatora rzutowania. Czy możesz wymyślić takie scenariusze? Ponieważ są to również potencjalne zapachy kodu, jakie według Pana czynniki projektowe przyczyniły się do zaprojektowania funkcji, która może spowodować awarię w dół, bez manifestu w kodzie?