约束和重载
在 C# 中,可以将泛型约束应用于类型参数,以限制可以使用的类型。然而,当对参数施加约束时,它会影响重载解析过程。
考虑以下代码:
static void Foo<T>(T a) where T : struct { } // 1 static void Foo<T>(T? a) where T : struct { } // 2
这两个函数重载 Foo 并根据可空性进行区分但是,尝试添加对类类型进行约束的第三个重载会失败:
static void Foo<T>(T a) where T : class { } // 3
这是因为该函数的参数与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 来处理所有三种情况:
以上是泛型约束可为空性如何影响 C# 方法重载?的详细内容。更多信息请关注PHP中文网其他相关文章!