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