public
est visible de partout.
internal
n'est visible que dans un assemblage
Vous avez tendance à utiliser uniquement interne 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 arbitraire de valeurs, par exemple.)
Il convient également de noter qu'en utilisant Reflection, toutes les méthodes sont appelables quelle que soit leur visibilité. Un autre «hack» pour contrôler / accéder aux API cachées en interne.
internal
et toutes les méthodespublic
. Si vous avez besoin d'une meilleure visibilité, vous pouvez redéfinir l'ensemble de la classepublic
. Mais je ne sais pas si elle est censée être utilisée de cette façon. Alors je continue à googler ... edit Et voilà, même sujet: stackoverflow.com/questions/9302236internal
est utile lorsque vous souhaitez déclarer un membre ou un type dans une DLL, pas en dehors de cela ...normalement, lorsque vous déclarez un membre car
Public
vous pouvez y accéder à partir d'autres DLL. mais, si vous deviez déclarer quelque chose comme public juste dans votre bibliothèque de classes, vous pouvez le déclarer commeInternal
.en définition formelle: les membres internes sont visibles juste à l'intérieur de l'assemblage courant ...
la source
internal
est également utile lors de l'écriture de tests unitaires. L'InternalsVisibleTo
attribut 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 semblent privées au monde extérieur sans utiliser la réflexion.la source
Public est également accessible en dehors de l'assembly. Ainsi, lorsque vous avez une classe qui ne devrait pas être accédée, chaque classe de l'assembly devrait pouvoir y accéder, alors interne est la bonne chose. Si vous avez besoin d'un accès extérieur, utilisez public.
la source
En outre, les propriétés marquées comme lèveront
internal
unBindingExpression path error
si elles sont utilisées pour DataBinding dans WPF. Donc, ceux-ci doivent êtrepublic
pour fonctionner correctement, même lorsque le DataBinding a lieu dans le même assembly.la source
Si vous pouvez référencer l'assemblage de l'extérieur, vous avez la portée des classes internes et publiques
la source