인터페이스에 선언된 정적 추상 멤버

.NET 6에서는 static 인터페이스 멤버를 abstract로 표시할 수 있는 새로운 기능을 미리 봅니다. 이 기능은 이전에 잘못된 것으로 간주된 IL(중간 언어) 메타데이터 패턴을 허용하기 위한 ECMA 335 사양의 몇 가지 변경 내용을 포함합니다. 자세한 내용은 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 기본 형식에 존재하는 인터페이스 멤버를 포함하여 static abstract 인터페이스 멤버의 새로운 개념을 고려하도록 .NET 이진 파일 또는 C# 소스 코드를 사용하는 모든 도구를 업데이트합니다.

영향을 받는 API

해당 없음

참고 항목