C # 8에서 기본 인터페이스 방법의 동작이 변경된 이유는 무엇입니까? 과거에 다음 코드 (기본 인터페이스 메소드가 데모가 릴리스되지 않은 경우) :
interface IDefaultInterfaceMethod
{
// By default, this method will be virtual, and the virtual keyword can be here used!
virtual void DefaultMethod()
{
Console.WriteLine("I am a default method in the interface!");
}
}
interface IOverrideDefaultInterfaceMethod : IDefaultInterfaceMethod
{
void IDefaultInterfaceMethod.DefaultMethod()
{
Console.WriteLine("I am an overridden default method!");
}
}
class AnyClass : IDefaultInterfaceMethod, IOverrideDefaultInterfaceMethod
{
}
class Program
{
static void Main()
{
IDefaultInterfaceMethod anyClass = new AnyClass();
anyClass.DefaultMethod();
IOverrideDefaultInterfaceMethod anyClassOverridden = new AnyClass();
anyClassOverridden.DefaultMethod();
}
}
다음과 같은 출력이 있습니다.
콘솔 출력 :
나는 인터페이스의 기본 방법입니다!
재정의 된 기본 방법입니다!
그러나 C # 8의 마지막 버전에서는 위의 코드가 다음과 같은 출력을 생성합니다.
콘솔 출력 :
재정의 된 기본 방법입니다!
재정의 된 기본 방법입니다!
왜 이런 행동이 바뀌 었는지 설명해 줄 수 있습니까?
노트 :
IDefaultInterfaceMethod anyClass = new AnyClass(); anyClass.DefaultMethod();
((IDefaultInterfaceMethod) anyClass).DefaultMethod(); // STILL the same problem!??
Cut base() syntax for C# 8. We intend to bring this back in the next major release.
입니다. 제대로 작동하려면 런타임 지원이 필요합니다.
virtual
것 같아요? 그리고 아마도 상속 다이아몬드를 소개합니다