"default" 通用约束有什么作用?

What does the "default" generic constraint do?

下面的代码可以编译,但是微软的文档似乎根本没有提到这个特定的约束类型。

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 可空引用类型的设计提案中找到。添加它是为了在 struct 约束中消除 class 之间的歧义,这些约束在可空泛型参数 T?.

的重写或显式实现的方法中

更多详细信息也可以在 Unconstrained type parameter annotations proposal

中找到

To allow annotations for type parameters that are not constrained to reference types or value types, C#9 allows a new where T : default constraint.

这些约束和注释在 nullable contexts

中有效