Rumah > pembangunan bahagian belakang > C++ > Bolehkah C# mencapai kovarians jenis kembali, dan jika tidak, apakah penyelesaiannya?

Bolehkah C# mencapai kovarians jenis kembali, dan jika tidak, apakah penyelesaiannya?

DDD
Lepaskan: 2025-01-29 15:46:13
asal
787 orang telah melayarinya

Can C# Achieve Return Type Covariance, and If Not, What Workarounds Exist?

C# Kembalikan Jenis Kovarians: Batasan dan Penyelesaian

.NET Pembangunan laman web sering memerlukan jenis halaman yang disesuaikan. Mengakses halaman ini dari kawalan boleh menjadi masalah melainkan jika jenis halaman lalai ditindih dengan yang tersuai. Walau bagaimanapun, C# tidak langsung menyokong kovarians jenis pulangan, menghalang penindasan mudah kaedah kelas asas untuk mengembalikan jenis yang lebih khusus. Batasan ini memerlukan penyelesaian.

Cabaran: secara langsung mengatasi kaedah kelas asas untuk mengembalikan jenis yang diperoleh tidak dibenarkan dalam C#.

Strategi penyelesaian:

Penyelesaian ini melibatkan menggunakan kaedah kelas asas abstrak dan kaedah kelas yang diperolehi konkrit yang memanfaatkan pengubah

untuk mencapai kesan yang sama. Pendekatan ini mengekalkan penaipan yang lebih kuat apabila berurusan dengan jenis masa kompilasi. new

Pelaksanaan Contoh: Corak ini membolehkan untuk mengatasi kaedah maya

sambil menyediakan jenis pulangan yang lebih spesifik (
<code class="language-csharp">abstract class Enclosure
{
    protected abstract Animal GetContents();
    public Animal Contents() { return this.GetContents(); }
}

class Aquarium : Enclosure
{
    protected override Animal GetContents() { return this.Contents(); }
    public new Fish Contents() { /* ... implementation to return a Fish object ... */ }
}</code>
Salin selepas log masuk
) melalui kaedah

dalam kelas yang diperolehi (GetContents()). Kata kunci Fish secara eksplisit menunjukkan bahawa kelas yang diperolehi mencipta kaedah baru, tidak mengatasi kaedah kelas asas. Ini berkesan mencapai tingkah laku yang dikehendaki semasa mematuhi kekangan sistem jenis C#. Contents()

Atas ialah kandungan terperinci Bolehkah C# mencapai kovarians jenis kembali, dan jika tidak, apakah penyelesaiannya?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan