El siguiente código se compila, pero parece que los documentos de Microsoft no mencionan este tipo de restricción en particular.
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? { } }¿Alguna idea de lo que hace? La única pista que tengo hasta ahora es que solo funciona en métodos.
Esta restricción default se puede encontrar en la propuesta de diseño de C#9 para tipos de referencia que aceptan valores NULL. Se agregó para eliminar la ambigüedad entre las restricciones de struct de class en métodos anulados o implementados explícitamente para parámetros genéricos anulables T? .
También se pueden encontrar más detalles en la propuesta de anotaciones de parámetros de tipo sin restricciones
Para permitir anotaciones para parámetros de tipo que no están restringidos a tipos de referencia o tipos de valor, C#9 permite una nueva restricción
where T : default.
Estas restricciones y anotaciones funcionan dentro de contextos anulables