ホームページ > バックエンド開発 > C++ > C# の汎用制約では、特定のパラメーター型を持つコンストラクターを指定できますか?

C# の汎用制約では、特定のパラメーター型を持つコンストラクターを指定できますか?

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

Can C# Generic Constraints Specify Constructors with Specific Parameter Types?

C# の汎用コンストラクターとパラメーターの制約

C# の汎用制約を使用すると、型パラメーターに条件を指定できます。 "new()" 制約は、型にパラメータのないコンストラクタがあることを保証する一般的な制約の 1 つです。ただし、状況によっては、コンストラクター パラメーターに対してより具体的な制約が必要になる場合があります。

質問:

特定のパラメーター型を持つコンストラクターの存在を必要とする汎用制約を指定できますか?たとえば、ジェネリック型 T は、「float[,]」パラメーターを受け入れるコンストラクターを持つように制約できますか?

以下に示すように、このような制約を直接実装しようとすると、コンパイルが失敗します。

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

答え:

残念ながら、このような制約を C# で直接指定することはできません。ただし、回避策はあります。

回避策:

一般的な回避策は、指定されたパラメーターを使用して必要な型のオブジェクトを作成するデリゲートを提供することです。このデリゲートは、パラメーターとしてジェネリック メソッドに渡すことができます。

<code class="language-csharp">public class A {
    public static void Method<T>(T a, Func<float[,], T> creator) {
        // ... 执行某些操作 ...
    }
}</code>
ログイン後にコピー

このアプローチでは、特定の値でオブジェクトをインスタンス化するようにデリゲートをカスタマイズできるため、コンストラクター パラメーターを柔軟に指定できます。

以上がC# の汎用制約では、特定のパラメーター型を持つコンストラクターを指定できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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