OVH Cloud OVH Cloud

Comment masquer une interface en C# ?

12 réponses
Avatar
Laurent Vigne
Bonjour , je voudrais savoir comment faire pour rendre les méthodes d'une
interface inaccessibles de l'extérieur. En C++ il est possible lorsqu'on
dérive de spécifier une visibilité. En C# cela est impossible, normal
puisque l'on peut dériver d'une seule classe et que l'on doit toujours avoir
accès à la classe Object de base. Cependant lorsque l'on souhaite
implémenter une interface je ne comprend pas pourquoi on ne peut pas
implémenter les méthodes avec une visibilité réduite !



----------------------------------------------------------------------------
-------------------------------------

Exemple :



internal Interface ImyInterface // Ici "internal" permet de ne pas
montrer mon interface de l'exterieur, parfait !!!

{

void MafonctionTresPrivee(); // Impossible de mettre un private ou
internal ici, c plutôt normal

}



public class A, ImyInterface // Impossible de mettre un private ou
internal en implementant l'interface ici, c'est la logique du C#, Ok
j'accepte

{

public void MafonctionTresPrivee() // impossible de mettre la
surcharge en private ou internal !!! Erreur de compilateur ?

{

ASSERT(false);

}

}



public class B

{

A myObjectA = new A();

myObjectA .MafonctionTresPrivee(); // Et voila on peut accéder à ma
fonction !!!

}

----------------------------------------------------------------------------
------------------------------------




Bien sur il existe des bidouilles pour pouvoir masquer ces méthodes, comme
implémenter une 3eme classe.

Mais j'aimerais qqc de propre !



Merci d'avance

2 réponses

1 2
Avatar
Ambassadeur Kosh
> (Viens du post de Robert Jordan sur le forum US)

-----------------------------------------------
internal interface MyInterface {
void DoSomething();
}

public class MyClass : MyInterface {
public MyClass() {
}

void MyInterface.DoSomething() {
}
}


-----------------------------------------------

Cela résoud entierement mon probleme !!!!

La méthode DoSomething() implémentée de cette manière n'est pas accessible
directement à partir de MyClass.



alors, histoire de, je recopie la question de départ, qui etait

"Bonjour , je voudrais savoir comment faire pour rendre les méthodes d'une
interface inaccessibles de l'extérieur".

tout le monde aura bien constaté que n'importe qui disposant d'un objet
MyClass myClass = new MyClass() ; est dans l'impossibilité d'appliquer
dessus DoSomething() ;

pffffff....

Et comme l'interface est déclarée en internal, il n'y a ainsi aucune
visibilité sur DoSomething() à l'exterieur de l'assembly, même si MyClass
est public !



ça d'accord. internal à cet aspect interessant.
Avatar
Laurent Vigne
> tout le monde aura bien constaté que n'importe qui disposant d'un objet
MyClass myClass = new MyClass() ; est dans l'impossibilité d'appliquer
dessus DoSomething() ;

pffffff....




Et bien c'est exactement ce que je demandais ! Je comprend pas le " pffffff
"

Pour avoir acces à DoSomething() il faut obligatoirement connaitre
l'interface et comme celle-ci est déclarée internal, seuls les éléments de
l'assembly peuvent y avoir acces !
1 2