ホームページ > バックエンド開発 > C++ > ジェネリッククラスは、ランタイム決定されたタイプパラメーターでインスタンス化できますか?

ジェネリッククラスは、ランタイム決定されたタイプパラメーターでインスタンス化できますか?

DDD
リリース: 2025-02-01 12:31:10
オリジナル
677 人が閲覧しました

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

ジェネリッククラスのランタイムインスタンス化

この記事では、実行時に決定されたタイプパラメーターを使用して、一般的なクラスをインスタンス化するという課題を調査します。 コンパイル時間の制約のため、ランタイム決定

変数を一般的な型パラメーターとして直接使用することは不可能です。コンパイラは、コンパイル時にコンクリートタイプが必要です Typeこれを直接試みると、以下に示すように、コンパイラエラーが発生します。

ソリューションには、反射を活用することが含まれます。次の例はこれを示しています:

<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>
ログイン後にコピー

重要なステップは

を使用することです。このメソッドは、
<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>
ログイン後にコピー
の一般的なインスタンスを表す新しいタイプを動的に作成し、ランタイム

Type.MakeGenericType()を置き換えます。 Generic<T>その後、この新しく構築されたタイプをインスタンス化します。 オープンジェネリックタイプを指定するためにTの使用に注意してください。

以上がジェネリッククラスは、ランタイム決定されたタイプパラメーターでインスタンス化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート