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.
public abstract class Metadata { } public class Metadata<T> : Metadata where T : struct { private T mDataType; // ... other members ... }
Kini, senarai kelas asas abstrak Metadata
boleh dibuat:
List<Metadata> metadataObjects = new List<Metadata>();
Senarai ini kini boleh memuatkan contoh pelbagai Metadata<T>
jenis:
metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>());
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!