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

Bolehkah Senarai C# Memegang Pelbagai Jenis Generik dengan Parameter Jenis Berbeza?

Barbara Streisand
Barbara Streisandasal
2025-01-18 16:32:13439semak imbas

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

Menggunakan Senarai C# dengan Pelbagai Jenis Generik: Penyelesaian

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!

Kenyataan:
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