ホームページ > バックエンド開発 > C++ > 汎用制約の Nullability は C# メソッドのオーバーロードにどのような影響を与えますか?

汎用制約の Nullability は C# メソッドのオーバーロードにどのような影響を与えますか?

Patricia Arquette
リリース: 2024-12-30 05:06:09
オリジナル
611 人が閲覧しました

How Does Generic Constraint Nullability Affect C# Method Overloading?

制約とオーバーロード

C# では、汎用制約を型パラメーターに適用して、使用できる型を制限できます。ただし、パラメーターに制約が設定されると、オーバーロード解決プロセスに影響します。

次のコードを考えてみましょう:

static void Foo<T>(T a) where T : struct { } // 1

static void Foo<T>(T? a) where T : struct { } // 2
ログイン後にコピー

これら 2 つの関数は Foo をオーバーロードし、null 可能性に基づいて区別されます。ただし、クラス型の制約を持つ 3 番目のオーバーロードを追加しようとすると失敗します。

static void Foo<T>(T a) where T : class { } // 3
ログイン後にコピー

これは、この関数のパラメータは、T : struct である Foo(T a) のパラメータと一致します。これを回避するには、別のパラメータに制約を設定する必要があります:

class RequireStruct<T> where T : struct { }
class RequireClass<T> where T : class { }

static void Foo<T>(T a, RequireStruct<T> ignore = null) where T : struct { } // 1
static void Foo<T>(T? a) where T : struct { } // 2
static void Foo<T>(T a, RequireClass<T> ignore = null) where T : class { } // 3
ログイン後にコピー

これで、Foo をオーバーロードして 3 つのケースすべてを処理できるようになります:

  • プレーン値タイプ (例: int) は Foo(T a, RequireStructignore = null) にマップされます。ここで、T : struct.
  • Null 許容値の型 (例: int?) は Foo(T? a) にマッピングされます。ここで、 T : struct.
  • 参照の型 (例: string) は Foo< にマッピングされます。 ;T>(T a, RequireClassignore = null) ここで、 T :クラス。

以上が汎用制約の Nullability は C# メソッドのオーバーロードにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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