Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Membuat Senarai Jenis Generik Terbuka dalam C#?

Bagaimanakah Saya Boleh Membuat Senarai Jenis Generik Terbuka dalam C#?

DDD
Lepaskan: 2025-01-11 08:42:40
asal
779 orang telah melayarinya

How Can I Create a List of Open Generic Types in C#?

Mengendalikan Senarai Jenis Generik Terbuka dalam C#

Bekerja dengan jenis generik terbuka (generik dengan parameter jenis yang tidak ditentukan) dalam C# memberikan cabaran kerana pengehadan dalam polimorfisme generik.

Cabaran:

Pertimbangkan kelas ini:

public abstract class Data<T> { }

public class StringData : Data<string> { }

public class DecimalData : Data<decimal> { }
Salin selepas log masuk

Percubaan untuk membuat senarai yang mengandungi contoh jenis Data berbeza ini secara langsung gagal:

List<Data> dataCollection = new List<Data>(); // Compiler error!
dataCollection.Add(new DecimalData());
dataCollection.Add(new StringData());
Salin selepas log masuk

Ralat pengkompil timbul kerana Data ialah jenis generik terbuka, memerlukan hujah jenis.

Penyelesaian:

Ketiadaan pengendali berlian C# menghalang instantiasi langsung senarai generik terbuka. Polimorfisme tidak digunakan secara langsung untuk jenis generik terbuka. Penyelesaiannya ialah menggunakan jenis asas atau antara muka biasa:

public interface IData { void SomeMethod(); }

public abstract class DataBase { public abstract void SomeMethod(); }
Salin selepas log masuk

Kini, anda boleh membuat senarai menggunakan antara muka atau kelas asas:

List<IData> dataList = new List<IData>();
dataList.Add(new StringData()); // StringData must implement IData
dataList.Add(new DecimalData()); // DecimalData must implement IData

foreach (var item in dataList)
    item.SomeMethod();


List<DataBase> dataBaseList = new List<DataBase>();
dataBaseList.Add(new StringData()); // StringData must inherit from DataBase
dataBaseList.Add(new DecimalData()); // DecimalData must inherit from DataBase

foreach (var item in dataBaseList)
    item.SomeMethod();
Salin selepas log masuk

Pendekatan ini membolehkan koleksi pelbagai Data jenis, tetapi ia mengorbankan penaipan yang kuat berbanding dengan penyelesaian yang benar-benar generik. Contoh SomeMethod() menyerlahkan keperluan untuk antara muka biasa atau kaedah abstrak untuk mengekalkan fungsi merentas jenis yang berbeza.

Bacaan Lanjut:

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membuat Senarai Jenis Generik Terbuka dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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