Почему поведение методов интерфейса по умолчанию изменилось в 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!??
c#
c#-8.0
default-interface-member
Бассам Алугили
источник
источник
Cut base() syntax for C# 8. We intend to bring this back in the next major release.
. Это потребует поддержки во время выполнения для правильной работы.virtual
I догадываются? И, возможно, введение наследства алмазаОтветы:
Я подозреваю, что лучший вопрос будет:
Эта функция была запланирована, но была вырезана из C # 8 в апреле 2019 года , потому что для эффективной реализации потребуется поддержка из среды выполнения. Это не может быть добавлено вовремя перед выпуском. Эта функция должна хорошо работать как для C #, так и для VB.NET - F # в любом случае не любит интерфейсы.
Он будет работать через
base()
вызов, аналогичный тому, как работают классы. Купирование примера предложения:источник
Why would you do that?
. Тогда я узнал протокол встречи