interne vs public dans c #

Je veux connaître la différence entre les modificateurs de visibilité public et internal .

Quand devrions-nous utiliser internal dans une classe et quand public ? Je suis confus quand une méthode doit être public ou internal .

Je lis que l’ internal peut être accédé par l’Assemblée, tandis que public peut également être utilisé par l’assemblée où se situe la différence.

public est visible de n’importe où.

internal est visible uniquement dans un assemblage

Vous avez tendance à utiliser interne uniquement pour protéger les API internes. Par exemple, vous pouvez exposer plusieurs surcharges d’une méthode:

 public int Add(int x, int y) public int Add(int x,int y, int z) 

Les deux appellent la méthode interne

 internal int Add(int[] numbers) 

Vous pouvez alors mettre beaucoup de sophistication sur une méthode, mais la “protéger” en utilisant des méthodes de façade qui peuvent aider le programmeur à appeler la méthode correctement. (La méthode d’implémentation avec le paramètre array peut avoir une limite de valeurs arbitraire, par exemple.)

Il est également intéressant de noter que l’utilisation de Reflection permet d’utiliser n’importe quelle méthode indépendamment de sa visibilité. Un autre “hack” pour contrôler / accéder aux API cachées en interne.

internal est utile lorsque vous souhaitez déclarer un membre ou un type dans une DLL, et non en dehors de celui-ci …
normalement, lorsque vous déclarez un membre comme Public vous pouvez y accéder depuis d’autres DLL. mais, si vous deviez déclarer quelque chose de public à l’intérieur de votre bibliothèque de classes, vous pouvez le déclarer comme Internal .
dans la définition formelle: les membres internes sont visibles juste à l’intérieur de l’assemblage actuel …

internal est également utile pour écrire des tests unitaires. L’atsortingbut InternalsVisibleTo permet à votre assembly de test d’accéder aux méthodes internes de votre assembly de code. C’est-à-dire que vous pouvez tester des méthodes qui apparaissent privées au monde extérieur sans utiliser de reflection.

Le public peut également être consulté en dehors de l’assemblée. Donc, quand vous avez une classe à laquelle il ne faut pas accéder, chaque classe de l’assemblée devrait pouvoir y accéder, alors interne est la bonne chose. Si vous avez besoin d’un access extérieur, utilisez public.

En outre, les propriétés marquées comme internal lancent une BindingExpression path error si elles sont utilisées pour DataBinding dans WPF. Donc, ceux-ci doivent être public pour fonctionner correctement, même lorsque le DataBinding a lieu dans le même assemblage.

Si vous pouvez référencer l’assemblage de l’extérieur, vous avez le champ d’application des classes internes et publiques