Penghantaran Eksplisit dari Pangkalan ke Kelas Terbitan dalam C#: Risiko Masa Jalan
Menetapkan objek kelas asas secara langsung kepada rujukan kelas terbitan menggunakan cast eksplisit dalam C# adalah bermasalah dan biasanya akan mengakibatkan pengecualian masa jalan.
Batasan ini berpunca daripada sifat asas rujukan kelas terbitan. Rujukan sedemikian sememangnya mengharapkan objek jenis kelas terbitan (atau nol). Menetapkan objek kelas asas melanggar jangkaan ini, membawa kepada tingkah laku yang tidak dapat diramalkan.
Pertimbangkan contoh ini:
<code class="language-csharp">object o = new object(); string s = (string)o; // This will throw an InvalidCastException int i = s.Length; // Unreachable code</code>
Percubaan untuk mengakses ahli khusus untuk kelas terbitan (s.Length
dalam kes ini) selepas pelakon yang tidak sah adalah mustahil. Barisan pelakon gagal kerana o
tidak mempunyai contoh string
.
Alternatif Disyorkan
Jika anda perlu menukar antara jenis asas dan terbitan, elakkan penghantaran eksplisit. Sebaliknya, gunakan kaedah yang lebih selamat:
Buat Contoh Jenis Terbitan: Tulis kaedah yang menjadikan objek kelas terbitan, mengisi sifatnya berdasarkan data objek kelas asas. Pendekatan ini memastikan keselamatan jenis dan tingkah laku yang boleh diramal.
Warisan Refactor: Nilai semula hierarki warisan anda. Jika penukaran kerap diperlukan, perhubungan warisan mungkin tidak direka bentuk secara optimum. Pertimbangkan corak reka bentuk alternatif atau penstrukturan semula kelas anda.
Dengan mengelakkan penghantaran terus dan menggunakan alternatif ini, anda akan meningkatkan keteguhan kod dan mengelakkan ralat masa jalan.
Atas ialah kandungan terperinci Bolehkah Objek Kelas Asas Dihantar Secara Eksplisit ke Rujukan Kelas Terbitan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!