Rumah >pembangunan bahagian belakang >C++ >Bolehkah kelas generik diberi instantiated dengan parameter jenis runtime yang ditentukan?

Bolehkah kelas generik diberi instantiated dengan parameter jenis runtime yang ditentukan?

DDD
DDDasal
2025-02-01 12:31:10680semak imbas

Can Generic Classes Be Instantiated with Runtime-Determined Type Parameters?

instantiasi runtime kelas generik

Artikel ini meneroka cabaran untuk menafikan kelas generik dengan parameter jenis yang ditentukan semasa runtime. Secara langsung menggunakan pembolehubah

yang ditentukan oleh runtime sebagai parameter jenis generik adalah mustahil kerana kekangan kompilasi masa. Pengkompil memerlukan jenis konkrit pada masa penyusunan. Type

Mencuba ini secara langsung, seperti yang ditunjukkan di bawah, menghasilkan ralat pengkompil:

<code class="language-csharp">string typeName = "<read type name somewhere>"; // Runtime type name
Type myType = Type.GetType(typeName);

MyGenericClass<myType> myGenericClass = new MyGenericClass<myType>(); // Compiler error</code>
Penyelesaian melibatkan refleksi memanfaatkan. Contoh berikut menunjukkan ini:

<code class="language-csharp">using System;
using System.Reflection;

public class Generic<T>
{
    public Generic()
    {
        Console.WriteLine($"T={typeof(T)}");
    }
}

class Test
{
    static void Main()
    {
        string typeName = "System.String";
        Type typeArgument = Type.GetType(typeName);

        Type genericClass = typeof(Generic<>); // Note the <> here
        Type constructedClass = genericClass.MakeGenericType(typeArgument);

        object created = Activator.CreateInstance(constructedClass);
    }
}</code>
Langkah penting menggunakan

. Kaedah ini secara dinamik mencipta jenis baru yang mewakili contoh generik Type.MakeGenericType(), menggantikan Generic<T> dengan runtime T. typeArgument kemudian instantiates jenis yang baru dibina ini. Perhatikan penggunaan Activator.CreateInstance() untuk menentukan jenis generik terbuka. Generic<>

Atas ialah kandungan terperinci Bolehkah kelas generik diberi instantiated dengan parameter jenis runtime yang ditentukan?. 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