Rumah > pembangunan bahagian belakang > C++ > Bolehkah Senarai C# Memegang Berbilang Contoh Kelas Generik dengan Parameter Jenis Berbeza?

Bolehkah Senarai C# Memegang Berbilang Contoh Kelas Generik dengan Parameter Jenis Berbeza?

Mary-Kate Olsen
Lepaskan: 2025-01-18 16:36:09
asal
602 orang telah melayarinya

Can a C# List Hold Multiple Generic Class Instances with Different Type Parameters?

Bolehkah anda membuat senarai jenis generik dalam C#?

Dalam C#, anda boleh mencipta kelas dengan parameter jenis generik. Walau bagaimanapun, adakah mungkin untuk membuat senarai yang mengandungi berbilang contoh berbeza bagi kelas generik ini dengan parameter jenis yang berbeza?

Mari kita pertimbangkan contoh berikut:

<code class="language-csharp">public class Metadata<DataType> where DataType : struct
{
    private DataType mDataType;
}</code>
Salin selepas log masuk

Di sini, kami mempunyai kelas generik Metadata yang boleh digunakan untuk jenis nilai yang berbeza. Sekarang, katakan kita ingin membuat senarai objek Metadata ini, yang mempunyai jenis yang berbeza. Bolehkah kita melakukannya?

<code class="language-csharp">List<Metadata<DataType>> metadataObjects; // 错误:DataType 未定义
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
Salin selepas log masuk

Malangnya, ini tidak boleh dilakukan dalam C# kerana parameter jenis generik senarai mestilah sama untuk semua elemen. Untuk mengatasi had ini, kelas warisan dan abstrak boleh digunakan.

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

// 继承抽象 MetadataBase 类
public class Metadata<DataType> : MetadataBase where DataType : struct
{
    private DataType mDataType;
}</code>
Salin selepas log masuk

Kini anda boleh membuat senarai kelas asas abstrak MetadataBase. Ini membolehkan anda menambah pelbagai jenis Metadata objek pada senarai:

<code class="language-csharp">List<MetadataBase> metadataObjects = new List<MetadataBase>();
metadataObjects.Add(new Metadata<int>());
metadataObjects.Add(new Metadata<bool>());
metadataObjects.Add(new Metadata<double>());</code>
Salin selepas log masuk

Dengan menggunakan kelas asas abstrak, kami berjaya membuat senarai yang boleh menyimpan contoh pelbagai jenis Metadata. Perlu diingatkan bahawa penukaran jenis diperlukan apabila mengakses atribut mDataType elemen dalam senarai, kerana MetadataBase tidak mengandungi atribut ini. Ini perlu dikendalikan mengikut kes, seperti menggunakan jenis dynamic atau operator is untuk semakan dan penukaran jenis.

Atas ialah kandungan terperinci Bolehkah Senarai C# Memegang Berbilang Contoh Kelas Generik dengan Parameter Jenis Berbeza?. 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