Pengecoran Taip Selamat Objek Kelas Asas kepada Rujukan Kelas Terbitan dalam C#
Mengirim objek kelas asas secara langsung kepada rujukan kelas terbitan dalam C# adalah berisiko dan selalunya membawa kepada pengecualian masa jalan. Ini kerana rujukan kelas terbitan menjangkakan objek jenisnya sendiri atau null.
Contoh Ilustrasi:
<code class="language-csharp">object o = new object(); string s = (string)o; // This will throw an exception at runtime</code>
Percubaan untuk mengakses ahli kelas yang diperolehi selepas hantaran yang tidak selamat ini akan mengakibatkan ralat:
<code class="language-csharp">int i = s.Length; // Runtime exception: InvalidCastException</code>
Pembolehubah o
memegang objek kelas asas, tidak serasi dengan ahli kelas terbitan seperti Length
.
Untuk mengelakkan ralat masa jalan, sentiasa sahkan jenis sebenar objek sebelum menghantar. Operator is
dan padanan corak menyediakan alternatif yang selamat:
<code class="language-csharp">object o = new object(); if (o is string str) { int i = str.Length; // Safe access to Length } else { // Handle the case where o is not a string } // Or using pattern matching: if (o is string s2) { int length = s2.Length; }</code>
Sebagai alternatif, nilai semula reka bentuk kelas anda. Jika pemutus kerap antara kelas asas dan turunan diperlukan, ini mungkin menunjukkan kecacatan dalam hierarki warisan. Pemfaktoran semula untuk menghapuskan keperluan untuk tuangan sedemikian selalunya merupakan penyelesaian yang lebih baik. Pertimbangkan untuk menggunakan antara muka atau gubahan dan bukannya warisan jika sesuai.
Atas ialah kandungan terperinci Bagaimana untuk Menaip Objek Kelas Asas dengan Selamat kepada Rujukan Kelas Terhasil dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!