Rumah >pembangunan bahagian belakang >C++ >Bolehkah Senarai C# Memegang Pelbagai Jenis Generik dengan Parameter Jenis Berbeza?
Cabarannya terletak pada mencipta senarai C# yang mampu menyimpan berbilang jenis generik dengan parameter jenis yang berbeza-beza dalam senarai yang sama. Pertimbangkan kelas Metadata<T>
terhad kepada jenis nilai. Matlamatnya ialah untuk mencipta senarai yang boleh menyimpan objek Metadata<int>
, Metadata<bool>
dan Metadata<double>
secara serentak.
Menggunakan senarai Metadata<T>
secara langsung tidak mungkin kerana T
mestilah jenis konkrit tunggal. Walau bagaimanapun, penyelesaian menggunakan warisan menyediakan pendekatan praktikal.
Penyelesaian menggunakan Warisan:
Pendekatan ini memperkenalkan kelas asas abstrak Metadata
dan memperoleh kelas khusus seperti Metadata<T>
daripadanya.
<code class="language-csharp">public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }</code>
Kini, senarai kelas asas abstrak Metadata
boleh dibuat:
<code class="language-csharp">List<Metadata> metadataObjects = new List<Metadata>();</code>
Senarai ini kini boleh memuatkan contoh pelbagai Metadata<T>
jenis:
<code class="language-csharp">metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());</code>
Ini menyelesaikan masalah secara elegan dengan menyediakan jenis biasa (Metadata
) untuk senarai sambil membenarkan pelaksanaan jenis khusus melalui warisan. Akses kepada T
khusus dalam setiap objek memerlukan penghantaran kembali kepada jenis Metadata<T>
yang sesuai. Ini adalah corak biasa apabila berurusan dengan polimorfisme dan jenis generik dalam C#.
Atas ialah kandungan terperinci Bolehkah Senarai C# Memegang Pelbagai Jenis Generik dengan Parameter Jenis Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!