76 votes

Pourquoi la mise en œuvre explicite d'une interface ne peut pas être publique?

J'ai méthode dans la classe qui est la mise en œuvre de l'interface. Quand je l'ai faite Implémentation explicite j'ai eu une erreur du compilateur

 The modifier 'public' is not valid for this item
 

Pourquoi ne pas avoir public pour l'implémentation d'interface explicite?

71voto

Richard Szalay Points 42486

La raison pour une implémentation d'interface explicite est d'éviter les collisions de noms avec le résultat final étant que l'objet doit être explicitement exprimés à cette interface avant d'appeler ces méthodes.

Vous pouvez penser à ces méthodes qui ne sont pas comme étant publiques sur la classe, mais en étant lié directement à l'interface. Il n'y a aucune raison pour spécifier public/privé/protégé puisqu'il sera toujours public que les interfaces ne sont pas membres du public.

(Microsoft a une vue d'ensemble sur l'implémentation d'interface explicite)

27voto

AVD Points 57984

L'explicit membre de mise en œuvre permettent de désambiguïsation de les membres interface avec la même signature.

Sans explicit membre interface implémentations, il serait impossible pour une classe ou d'une structure différentes implémentations de l'interface de membres avec la même signature et le type de retour.

Pourquoi Explicite la mise en Œuvre d'une Interface ne peut pas être public? Lorsqu'un membre est explicitement mis en œuvre, il ne peut pas être consulté par le biais d'une instance de classe, mais seulement à travers une instance de l'interface.

public interface IPrinter
{
   void Print();
}
public interface IScreen
{
   void Print();
}

public class Document : IScreen,IPrinter
{
    void IScreen.Print() { ...}
    void IPrinter.Print() { ...} 
}

.....
Document d=new Document();
IScreen i=d;
IPrinter p=d;
i.Print();
p.Print();
.....

Explicit interface membre des implémentations ne sont pas accessibles par le biais de la classe ou structure des instances.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X