“默认”通用约束有什么作用?
c#
c#-9.0
下面的代码可以编译,但似乎微软的文档根本没有提到这个特定的约束类型。
class TestGenericsBase<T1>
{
public virtual void Method1<T>(T arg)
{
}
}
class TestGenerics : TestGenericsBase<object>
{
public override void Method1<T>(T arg)
where T : default // what does this do?
{
}
}
知道它有什么作用吗?到目前为止,我唯一的线索是它只适用于方法。
回答
此default约束可以在 C#9 设计提案中找到,用于可空引用类型。添加它是为了消除可空泛型参数的覆盖或显式实现方法中的classinstruct约束 之间的歧义T?。
更多细节也可以在无约束类型参数注释提案中找到
为了允许对不受引用类型或值类型约束的类型参数进行注释,C#9 允许使用新
where T : default
约束。
这些约束和注释在可为空的上下文中工作