Je viens de tomber sur ce comportement étrange aujourd'hui:inattendue erreur c compilateur # Implémentation d'interface
interface IFooBar
{
void Foo();
void Bar();
}
class FooBar : IFooBar
{
void IFooBar.Foo()
{
}
void IFooBar.Bar()
{
this.Foo();
}
}
La ligne this.Foo(); soulève l'erreur du compilateur
« MyProject.FooBar » ne contient pas de définition pour « Foo » et aucune extension méthode « Foo » accepter un premier argument de type « MyProject.FooBar » se trouve (? Il vous manque un avec la directive ou un ensemble référence)
Si je choisis les méthodes publiques au lieu du style de déclaration interface.Procédé, le code compile:
class FooBarOk : IFooBar
{
public void Foo()
{
}
public void Bar()
{
this.Foo();
}
}
Je voudrais comprendre pourquoi cette erreur est soulevée, et comment il peut être contourné en utilisant la notation interface.Procédé
Merci pour le lien et la phrase magique: "Lorsqu'un membre est explicitement implémenté, il n'est pas accessible via une instance de classe, mais seulement via une instance de l'interface." – devio