Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
.NET 6 представляет новую функцию, где static
члены интерфейса могут быть помечены как abstract
. Эта функция включает несколько изменений в спецификации ECMA 335 для разрешения шаблонов метаданных промежуточного языка (IL), которые ранее считались незаконными. Дополнительные сведения см. в статье dotnet/runtime#49558.
Старое поведение
Если статический интерфейс помечен как abstract
:
- Компилятор C# создал ошибку CS0112.
- Средства и другие компиляторы создали незаконные метаданные IL.
Новое поведение
Начиная с .NET 6 статические элементы интерфейса можно пометить как abstract
и успешно скомпилировать. Кроме того, созданные шаблоны метаданных IL теперь считаются законными из-за изменений в спецификации ECMA 335.
Реализация static abstract
элементов интерфейса предоставляется типами, реализующими интерфейс.
Замечание
Для .NET 6 необходимо включить предварительные версии функций в проекте, чтобы иметь возможность пометить член интерфейса как static abstract
.
Так как это новый юридический шаблон IL, существующие средства могут неправильно обрабатывать связанные метаданные и иметь непредвиденное поведение. Скорее всего, средства столкнутся с новым шаблоном метаданных, так как интерфейсы с static abstract
элементами теперь отображаются в примитивных типах, например System.Int32.
Представленная версия
.NET 6
Тип разрушающего изменения
Это изменение может повлиять на совместимость двоичных файлов.
Причина изменения
Это изменение было введено, так как не было способа абстрагировать статические элементы и писать обобщенный код, который применяется к типам, определяющим эти статические элементы. Это особенно проблематично для типов элементов, которые существуют только в статической форме, например операторы.
Рекомендуемое действие
Обновите любые средства, использующие двоичные файлы .NET или исходный код C#, чтобы учитывать новую концепцию static abstract
членов интерфейса, включая те, которые теперь существуют в примитивных типах .NET.
Затронутые API
Не применимо