Miembros abstractos estáticos declarados en interfaces

.NET 6 tiene en versión preliminar una nueva característica por la que los miembros de las interfaces de static se pueden marcar como abstract. Esta característica implica varios cambios en la especificación ECMA 335 para permitir patrones de metadatos de lenguaje intermedio (IL) que anteriormente se consideraban ilegales. Para obtener más información, consulte la incidencia 49558 de dotnet/runtime.

Comportamiento anterior

Si una interfaz estática se marcaba como abstract:

  • El compilador de C# generaba el error CS0112.
  • Las herramientas y otros compiladores generaban metadatos de IL ilegales.

Comportamiento nuevo

A partir de .NET 6, los miembros de interfaz estáticos se pueden marcar como abstract y se compilarán correctamente. Además, los patrones de metadatos de IL que se generan ahora se consideran legales debido a los cambios en la especificación ECMA 335.

La implementación de los miembros de interfaz de static abstract la proporcionan los tipos que implementan la interfaz.

Nota

Para .NET 6, debe habilitar las características en versión preliminar del proyecto para poder marcar un miembro de interfaz como static abstract.

Puesto que se trata de un patrón de IL legal desde hace poco, es posible que las herramientas existentes procesen incorrectamente los metadatos asociados y tengan un comportamiento inesperado. Es probable que las herramientas encuentren el nuevo patrón de metadatos, porque las interfaces con miembros de static abstract ahora aparecen en los tipos primitivos, por ejemplo, System.Int32.

Versión introducida

.NET 6

Tipo de cambio importante

Este cambio puede afectar a la compatibilidad binaria.

Motivo del cambio

Este cambio se introdujo porque no había ninguna manera de abstraer los miembros estáticos y escribir código generalizado que se aplicara a los tipos que definen esos miembros estáticos. Esto era especialmente problemático para los tipos de miembros que solo existen en un formato estático, por ejemplo, los operadores.

Actualice las herramientas que consumen archivos binarios de .NET o código fuente de C# para que tengan en cuenta el nuevo concepto de miembros de interfaz de static abstract, incluidos los que ahora existen en los tipos primitivos de .NET.

API afectadas

N/D

Consulte también