Downcasting tidak populer, mungkin bau kode
Saya tidak setuju. Downcasting sangat populer ; sejumlah besar program di dunia nyata berisi satu atau lebih downcast. Dan itu mungkin bukan bau kode. Ini jelas merupakan bau kode. Itu sebabnya operasi downcasting diperlukan untuk menjadi nyata dalam teks program . Ini agar Anda bisa lebih mudah memperhatikan aroma dan menghabiskan perhatian review kode di atasnya.
dalam keadaan apa [s] yang tepat untuk menulis kode yang downcasts?
Dalam keadaan apa pun di mana:
- Anda memiliki 100% pengetahuan yang benar tentang fakta tentang tipe runtime dari sebuah ekspresi yang lebih spesifik daripada tipe kompilasi-waktu dari ekspresi, dan
- Anda perlu memanfaatkan fakta itu untuk menggunakan kemampuan objek yang tidak tersedia pada tipe waktu kompilasi, dan
- ini adalah penggunaan waktu dan upaya yang lebih baik untuk menulis para pemeran daripada untuk memperbaiki program untuk menghilangkan salah satu dari dua poin pertama.
Jika Anda bisa dengan murah merevisi sebuah program sehingga tipe runtime dapat dideduksi oleh kompiler, atau untuk merevisi program sehingga Anda tidak memerlukan kemampuan dari tipe yang lebih diturunkan, maka lakukanlah. Orang-orang yang tertekan ditambahkan ke bahasa untuk keadaan-keadaan di mana sulit dan mahal untuk dengan demikian memperbaiki program.
mengapa downcasting didukung oleh bahasa?
C # ditemukan oleh programmer pragmatis yang memiliki pekerjaan untuk dilakukan, untuk programmer pragmatis yang memiliki pekerjaan untuk dilakukan. Desainer C # bukanlah puritan OO. Dan sistem tipe C # tidak sempurna; oleh desain itu meremehkan pembatasan yang dapat ditempatkan pada jenis runtime dari suatu variabel.
Juga, downcasting sangat aman di C #. Kami memiliki jaminan kuat bahwa downcast akan diverifikasi pada saat runtime dan jika tidak dapat diverifikasi maka program melakukan hal yang benar dan crash. Ini luar biasa; itu berarti bahwa jika 100% pemahaman Anda yang benar tentang tipe semantik ternyata 99,99% benar, maka program Anda bekerja 99,99% dari waktu dan crash sisa waktu, bukannya berperilaku tak terduga dan merusak data pengguna 0,01% dari waktu .
LATIHAN: Setidaknya ada satu cara untuk menghasilkan downcast dalam C # tanpa menggunakan operator pemeran eksplisit. Bisakah Anda memikirkan skenario seperti itu? Karena ini juga merupakan bau kode yang potensial, menurut Anda faktor desain apa yang masuk ke dalam desain fitur yang dapat menghasilkan crash yang terputus-putus tanpa ada pemain nyata dalam kode tersebut?