2012-06-29 2 views
1

J'apprends les propriétés de l'interface et je suis tombé sur quelque chose que je pensais devoir fonctionner en fonction de MSDN et des exemples de manuels, mais ce n'est pas le cas. Si j'implémente la propriété d'interface explicitement, elle n'est pas reconnue lorsque mon instance de classe tente d'y accéder, mais fonctionne correctement si je le fais implicitement (je ne sais pas si c'est la bonne terminologie).La propriété d'interface échoue lors de la définition explicite

interface IMyInterface 
    { 
    string Name { get; set; }  
    } 

class MyClass : IMyInterface 
{ 
    private string name; 

    string IMyInterface.Name //works if not explicit: i.e., public string Name 
    { 
     get { return this.name; } 
     set { this.name = value; } 
    } 
} 


class Program 
{ 
    static void Main(string[] args) 
    { 
     MyClass myClass = new MyClass(); 
     myClass.Name = "blah"; // fails 

    } 
} 

Répondre

3

Voici comment il est censé fonctionner avec explicit interface implementations:

Une classe qui implémente une interface peut mettre en œuvre explicitement un membre de cette interface. Lorsqu'un membre est explicitement implémenté, il n'est pas accessible via une instance de classe, mais uniquement via une instance de l'interface.

Donc, si vous ré-écrivez votre code comme celui-ci, il ne devrait plus échouer:

static void Main(string[] args) 
{ 
    IMyInterface myClass = new MyClass(); 
    myClass.Name = "blah"; // no longer fails 
} 
+0

Ah, ok. Je comprends maintenant et merci. Certains d'entre eux sont si confus ... – user943870

Questions connexes