制約とオーバーロード
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
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 つのケースすべてを処理できるようになります:
以上が汎用制約の Nullability は C# メソッドのオーバーロードにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。