47 votes

Qu'est-ce qu'une interface privée?

Il y a quelque temps, dans une interview pour un poste .NET, l'interviewer m'a demandé "à quoi servirait une interface privée?".

Je lui ai demandé s'il voulait dire la différence entre l'implémentation d'interface implicite et explicite à laquelle il a répondu non.

Alors je me demande:

  1. Qu'est-ce qu'il voulait dire?
  2. Pour quoi utiliseriez-vous une interface privée?

35voto

ShuggyCoUk Points 24204

Une interface pourrait être privé intérieur d'une autre classe

public class MyClass
{
    private interface IFoo
    {
    	int MyProp { get; }
    }

    private class Foo : IFoo
    {
    	public int MyProp { get; set; }
    }

    public static void Main(string[] args)
    {
    	IFoo foo = new Foo();
    	return foo.MyProp;
    }
}

en fonction de l'utilité qu'il cache simplement à partir d'un autre code, même au sein de la même assemblée, qui dit interface existe. L'utilité de ce n'est pas très élevé à mon avis.

Interface explicite la mise en œuvre en est une autre, très utile en cas (surtout lorsque l'on travaille avec les génériques et plus non des interfaces génériques), mais je ne voudrais pas le terme " privé interfaces et de ne dirais pas que le terme est couramment utilisé de cette manière.

En utilisant les deux techniques que vous pouvez faire:

public class MyClass
{
    private interface IFoo
    {
    	int MyProp { get; }
    }

    public class Foo : IFoo
    {
    	int IFoo.MyProp { get; set; }
    }

    public static void Main(string[] args)
    {
    	IFoo foo = new Foo();
    	return foo.MyProp;
    }
}

public class HiddenFromMe
{
    public static void Main(string[] args)
    {
    	MyClass.Foo foo = new MyClass.Foo();
    	return foo.MyProp; // fails to compile
    }
}

Cela vous permet de vous exposer les classes imbriquées, d'une certaine manière, tout en permettant à la classe parent d'invoquer des méthodes sur eux que le monde extérieur ne peut pas. C'est potentiellement un cas utile mais n'est pas quelque chose que je souhaite utiliser très souvent. Certainement, il s'agit de les utiliser dans une interview sent d'être un cas limite de l'interviewer à l'aide parce qu'ils ont vu et si c'était "intéressants"

10voto

Mark Dickinson Points 4276

Voir ce lien . "Non," est une réponse assez pauvre s'il cherchait à savoir ce que vous saviez. Cela ressemble à quelqu'un qui veut juste montrer à quel point il sait.

1voto

Gerrie Schenck Points 13421

Tout comme une classe interne (qui est également privée), vous pouvez utiliser une interface privée dans une classe existante.

1voto

majkinetor Points 2375

J'ai googlé un peu et trouvé cet article qui explique comment les interfaces privées peuvent être utilisés pour fournir des interfaces différentes pour différents clients. C'est le C++ histoire.

Je ne pense pas que cela peut être appliqué à C# tho, parce que le même effet de l'OMI peut être réalisé avec des interfaces explicites et les clients qui jettent de l'hôte à l'interface appropriée.

Peut-être que quelqu'un d'autre peut voir quelque chose je l'ai raté il y a....

J'ai également trouvé ce à MSDN:

Les méthodes d'Interface publique l'accessibilité, qui ne peut pas être modifié par le type d'implémentation. Un interne interface crée un contrat qui est pas destiné à être mis en œuvre à l'extérieur l'assemblée, qui définit les de l'interface. Un public type implémente une méthode interne interface à l'aide du modificateur virtuel permet la méthode pour être remplacée par un type dérivé qui est en dehors de la de l'assemblée. Si un deuxième type dans le la définition de l'assemblée appelle la méthode et s'attend à un usage interne uniquement contrat, comportement peut être compromise lorsque, au lieu de cela, la méthode de remplacement dans le en dehors de l'assemblée est exécutée. Cette crée une faille de sécurité.

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