Pourquoi le comportement des méthodes d'interface par défaut est-il modifié en C # 8? Dans le passé, le code suivant (lorsque la démonstration des méthodes d'interface par défaut n'était pas publiée):
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();
}
}
a la sortie suivante:
Sortie console:
Je suis une méthode par défaut dans l'interface!
Je suis une méthode par défaut remplacée!
Mais avec la dernière version C # 8, le code ci-dessus produit la sortie suivante:
Sortie console:
Je suis une méthode par défaut remplacée!
Je suis une méthode par défaut remplacée!
N'importe qui peut m'expliquer pourquoi ce comportement a changé?
Remarque:
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.
. Cela nécessiterait un support d'exécution pour fonctionner correctement.
virtual
je suppose? Et éventuellement l'introduction d'un diamant d'héritage