2010-10-22 3 views
3

Comment déclarer explicitement un membre d'une interface .ie:C# interface explicite membre annoncez

public interface IPerfil 
    { 
     int IDPerfil 
     { 
      get; 
      set; 
     } 
     int IDMarca 
     { 
      get; 
      set; 
     } 
     int IDRegional 
     { 
      get; 
      set; 
     } 
     int IDFilial 
     { 
      get; 
      set; 
     } 
} 

puis

public class ComentariosPerfil : BaseComentarios, IPerfil 
    { 
     public int IPerfil.IDFilial 
     { 
      get; 
      set; 
     } 
[...] 

Je reçois une erreur de compilation, en disant que le modificateur "public" ne peut pas être appliqué à cet article.

La question est:

Je veux que ce soit bien public. Je ne peux pas écrire des modificateurs dans l'interface comme:

public int IDPerfil 
     { 
      get; 
      set; 
     } 

Alors, comment puis-je mettre en œuvre explicitement un membre d'interface et faire public?

Répondre

6

Pour les interfaces explicitement implémentées, vous ne pouvez pas spécifier la visibilité. Il est pris de la visibilité dans la définition de l'interface.

Dans votre cas, utilisez ce qui suit. La fonction sera publique parce que c'est la façon dont l'interface IPerfil est définie:

public class ComentariosPerfil : BaseComentarios, IPerfil 
{ 
    int IPerfil.IDFilial 
    { 
     get; 
     set; 
    } 
+0

Vous ne pouvez pas non plus définir la visibilité dans une interface, car une interface définit le contrat public d'une classe, de sorte que toutes les méthodes d'interface sont publiques par défaut. – Femaref

+0

@Femaref: Peut-être que vous êtes confus par mon utilisation du mot "in". Je parle au début d'une définition d'interfaces, vous pouvez spécifier la visibilité. En outre, vous semblez impliquer que vous ne pouvez avoir que des interfaces publiques, ce qui n'est pas vrai. Vous pouvez facilement créer une interface interne puis l'implémenter. –

+0

Ouais, cela semble être le cas. – Femaref

0

Non, vous ne pouvez pas. Implémenter explicitement une interface signifie que vous devez d'abord la convertir en type d'interface pour utiliser le contrat défini. Tous les membres d'une interface sont publics par défaut, donc une interface explicite publique n'a aucun sens car vous ne pouvez pas y accéder à partir de la classe d'implémentation en premier lieu.

Questions connexes