ホームページ > バックエンド開発 > C++ > C# でジェネリック型を特定のコンストラクターを持つように制約するにはどうすればよいですか?

C# でジェネリック型を特定のコンストラクターを持つように制約するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-14 16:07:44
オリジナル
324 人が閲覧しました

How Can I Constrain a Generic Type to Have a Specific Constructor in C#?

C# ジェネリック型: コンストラクター パラメーターの制約

C# では、ジェネリック メソッドをパラメーターなしのコンストラクター (where T : new()) を持つ型に制約できます。 ただし、特定のパラメーター型を持つコンストラクターを制約として直接指定することはサポートされていません。

有効な制約の例:

<code class="language-csharp">public class A
{
    public static T Method<T>(T a) where T : new()
    {
        // ... some code ...
        return new T();
    }
}</code>
ログイン後にコピー

これにより、T がデフォルトのコンストラクターを持つ型に正しく制限されます。 ただし、次の場合はコンパイル エラーが発生します:

<code class="language-csharp">public class A
{
    public static T Method<T>(T a) where T : new(float[,] u)
    {
        // ... some code ...
        return new T(new float[0, 0]);
    }
}</code>
ログイン後にコピー

代替アプローチ

この制限を回避するには、デリゲートを利用して、必要なパラメーターの型を受け入れるコンストラクターを提供します。

<code class="language-csharp">public class A
{
    public static void Method<T>(T a, Func<float[,], T> creator)
    {
        // ... some code ...
        T instance = creator(new float[0, 0]); // Create T using the supplied delegate
    }
}</code>
ログイン後にコピー

ここで、creator デリゲートは float[,] を受け取り、T インスタンスを返します。 Method 関数は、オブジェクトの作成にこのデリゲートを使用します。 これにより、直接の制約メカニズムに依存せずにコンストラクター パラメーターを柔軟に指定できます。

以上がC# でジェネリック型を特定のコンストラクターを持つように制約するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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