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:
<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>
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!