Modificateurs d'accès sur les membres de l'interface en C #
J'obtiens une erreur de compilation à partir de la propriété suivante.
L'erreur est:
"Le modificateur" public "n'est pas valide pour cet article"
public System.Collections.Specialized.StringDictionary IWorkItemControl.Properties
{
get { return properties; }
set { properties = value; }
}
mais si je supprime le IWorkItemControl
il compile bien.
Pourquoi j'obtiens cette erreur et qu'est-ce que la différence d'avoir /ne pas avoir le nom de l'interface dans la signature?
source d'informationauteur benPearce
Vous devez vous connecter pour publier un commentaire.
Implémentation d'interface explicite ne vous permet pas de spécifier toutes les modificateurs d'accès. Lorsque vous implémentez une interface membre explicitement (en précisant le nom de l'interface avant le nom du membre), vous pouvez accéder à ce membre uniquement à l'aide de cette interface. En gros, si vous n':
Vous ne pouvez pas faire:
Il y a plusieurs cas d'utilisation pour l'EII. Par exemple, vous voulez fournir un
Close
méthode pour votre classe afin de libérer les ressources acquises, mais vous voulez continuer à mettre en œuvreIDisposable
. Vous pourriez faire:De cette façon, les consommateurs de la classe ne peut appeler
Close
directement (et ils ne voient même pasDispose
dans la liste Intellisense) mais vous pouvez toujours utiliser leTest
classe où unIDisposable
est prévu (p. ex. dans unusing
déclaration).Un autre cas d'utilisation pour EII est de fournir des implémentations différentes d'un même nom de l'interface de membre pour les deux interfaces:
Comme vous le voyez, sans EII c'est même pas possible à implémenter deux interfaces de cet exemple dans une classe unique (comme les propriétés diffèrent seulement dans le type de retour). Dans d'autres cas, vous pouvez fournissent volontairement des comportements différents pour les différents points de vue d'une classe grâce à différentes interfaces.
Tous les éléments de l'interface doit être public.
Après tout, une interface est la vue du public d'un objet.
Depuis Propriétés est un élément d'une interface IWorkItemControlil est déjà public, et vous ne pouvez pas spécifier son niveau d'accès, même d'assurer la redondance de préciser que c'est public.