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