C# · Avançado · Inglês · Técnico
static abstract members
Recurso do C# 11 que permite declarar em interfaces membros estáticos abstratos, incluindo operadores, que os tipos implementam e que o código genérico chama pelo parâmetro T.
Onde usar
É a base do generic math: INumber<T> permite escrever uma Soma<T> que serve para int, double e decimal sem duplicar código. Também permite fábricas como T.Criar() em constraints.
Em código
T Make<T>() where T : IFabrica<T>
=> T.Criar();
interface IFabrica<T> {
static abstract T Criar();
}
class Foo : IFabrica<Foo> {
public static Foo Criar() => new();
}Exemplos
Static abstract members made generic math possible.
Os static abstract members tornaram o generic math possível.
The constraint lets me call T.Create() inside the method.
O constraint me deixa chamar T.Create() dentro do método.
Cuidado
Não dá para usar a interface como tipo de uma variável comum: interfaces com static abstract só funcionam como constraint de genéricos.
Sinônimos
generic math