ExpertiDict

C# · Avançado · Inglês · Técnico

static abstract members

/ˈstætɪk ˈæbstrækt ˈmɛmbɚz/substantivo

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

Veja também

Todos os termos de C#