Bolehkah objek kelas asas dalam C# diberikan terus kepada rujukan kelas terbitan?
Dalam bahasa pengaturcaraan berorientasikan objek seperti C#, warisan kelas mewujudkan hubungan induk-anak antara kelas, dan kelas terbitan mewarisi sifat dan kaedah kelas asasnya. Ini menimbulkan persoalan: Bolehkah objek kelas asas ditugaskan terus kepada rujukan kelas terbitan menggunakan penukaran jenis eksplisit?
Ramai pengaturcara menghadapi masalah ini apabila cuba menggunakan taip untuk penukaran jenis dalam hierarki kelas. Walau bagaimanapun, adalah penting untuk memahami bahawa jenis tugasan ini tidak dibenarkan dalam C#. Sebabnya terletak pada sifat semula jadi rujukan kelas dan hubungannya dengan objek sebenar yang mereka wakili.
Dalam pengaturcaraan berorientasikan objek, rujukan ialah penunjuk kepada objek sebenar dalam ingatan. Rujukan kelas terbitan memegang penunjuk kepada contoh kelas terbitan. Menetapkan objek kelas asas kepada rujukan kelas terbitan bermakna rujukan akan menunjuk kepada objek yang tidak mempunyai semua sifat dan kaedah yang diharapkan oleh kelas terbitan. Ini boleh menyebabkan ralat masa jalan dan tingkah laku yang tidak dijangka.
Pertimbangkan contoh berikut:
<code class="language-csharp">class Animal { public void Eat() { } } class Dog : Animal { public void Bark() { } } Animal animal = new Animal(); Dog dog = (Dog)animal; // 错误:InvalidCastException</code>
Di sini, cuba untuk menetapkan haiwan objek kelas asas kepada anjing rujukan kelas terbitan akan menghasilkan InvalidCastException kerana objek haiwan tidak mempunyai kaedah Bark() yang terdapat dalam kelas Dog.
Untuk mencapai keserasian jenis yang betul, anda mesti memastikan bahawa objek yang dirujuk oleh rujukan kelas terbitan sebenarnya adalah contoh kelas terbitan. Ini boleh dicapai dengan mencipta contoh kelas terbitan dan memberikannya kepada rujukan, dan bukannya cuba menukar objek kelas asas kepada rujukan kelas terbitan.
Atas ialah kandungan terperinci Bolehkah Kami Menetapkan Objek Kelas Asas secara Terus kepada Rujukan Kelas Terbitan dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!