Rumah > pembangunan bahagian belakang > C++ > Bolehkah Objek Kelas Asas Dihantar Secara Eksplisit ke Rujukan Kelas Terbitan dalam C#?

Bolehkah Objek Kelas Asas Dihantar Secara Eksplisit ke Rujukan Kelas Terbitan dalam C#?

Linda Hamilton
Lepaskan: 2025-01-18 12:13:14
asal
416 orang telah melayarinya

Can a Base Class Object Be Explicitly Cast to a Derived Class Reference in C#?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan