Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencapai Polimorfisme dengan Jenis Generik Terbuka dalam C#?

Bagaimanakah Saya Boleh Mencapai Polimorfisme dengan Jenis Generik Terbuka dalam C#?

Mary-Kate Olsen
Lepaskan: 2025-01-11 06:46:41
asal
205 orang telah melayarinya

How Can I Achieve Polymorphism with Open Generic Types in C#?

Polimorfisme menggunakan jenis generik terbuka dalam C#

Apabila berurusan dengan kod generik, anda biasanya menghadapi senario di mana anda perlu mengendalikan pelbagai jenis data. Walau bagaimanapun, polimorfisme generik C# mempunyai batasan apabila berurusan dengan jenis generik terbuka.

Soalan

Pertimbangkan kod berikut:

<code class="language-csharp">public abstract class Data<T>
{
}

public class StringData : Data<string>
{
}

public class DecimalData : Data<decimal>
{
}

List<Data<T>> dataCollection = new List<Data<T>>(); // 错误:缺少类型参数

dataCollection.Add(new DecimalData());
dataCollection.Add(new StringData());</code>
Salin selepas log masuk

Dalam contoh ini, anda ingin membuat senarai yang boleh menyimpan kejadian subjenis Data yang berbeza. Walau bagaimanapun, baris terakhir gagal dengan ralat pengkompil kerana jenis generik terbuka (cth. Data) memerlukan parameter jenis untuk ditentukan.

Penyelesaian

C# tidak menyokong polimorfisme sebenar untuk jenis generik terbuka. Untuk mengatasi masalah ini, anda mempunyai beberapa pilihan:

  1. Buat senarai objek:

    <code class="language-csharp"> List<object> dataCollection = new List<object>();
    
     dataCollection.Add(new DecimalData());
     dataCollection.Add(new StringData());</code>
    Salin selepas log masuk

    Walau bagaimanapun, pendekatan ini kehilangan keselamatan jenis dan memerlukan penukaran yang jelas apabila mengakses data.

  2. Gunakan antara muka bukan generik atau kelas abstrak:

    <code class="language-csharp"> public interface IData
     {
         void SomeMethod();
     }
    
     public abstract class Data<T> : IData
     {
         public void SomeMethod()
         {
         }
     }
    
     List<IData> dataCollection = new List<IData>();
    
     dataCollection.Add(new DecimalData());
     dataCollection.Add(new StringData());</code>
    Salin selepas log masuk

    Ini membolehkan operasi bukan generik pada elemen senarai, dengan mengorbankan beberapa kemurahan dan keselamatan jenis.

Adalah penting untuk memahami batasan dan pertukaran penggunaan jenis generik terbuka dalam C# dan memilih penyelesaian yang paling sesuai dengan keperluan khusus anda.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Polimorfisme dengan Jenis Generik Terbuka 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