Quelle est la différence entre:
namespace Library{ class File{ //code inside it } }
et:
namespace Library{ public class File{ //code inside it } }
Alors, quelle sera la différence entre classe publique et classe ?
Sans spécifier public
la classe est implicitement internal
. Cela signifie que la classe est uniquement visible dans le même assembly. Lorsque vous spécifiez public
, la classe est visible à l’extérieur de l’assembly.
Il est également permis de spécifier explicitement le modificateur internal
:
internal class Foo {}
Le premier est équivalent à:
namespace Library{ internal class File{ //code inside it } }
Toutes les visibilités par défaut sont les moins visibles possibles – private
pour les membres des class
es et struct
s (méthodes, propriétés, champs, classes nestedes et enum
s nesteds) et internal
pour les membres directs des namespace
de namespace
s
internal
signifie qu’un autre code dans le même assemblage peut le voir, mais rien d’autre (sauf les assemblées d’amis et l’utilisation de la reflection).
Cela a du sens pour deux raisons:
public
vous pourriez accidentellement créer quelque chose de public qui devrait être privé ou interne. Si vous faites accidentellement quelque chose de pas assez visible, vous obtenez une erreur de compilation évidente et corrigez le problème. Si vous faites accidentellement quelque chose de trop visible, vous introduisez une faille dans votre code qui ne sera pas signalée comme une erreur et qui constituera un changement à corriger ultérieurement. Il est souvent considéré comme meilleur style d’être explicite avec vos modificateurs d’access, pour être plus clair dans le code, juste ce qui se passe.
Par défaut, toutes les class
es (et tous les types en l’occurrence) sont internal
, donc pour qu’elles soient accessibles de l’extérieur (sans matériel comme InternalsVisibleToAtsortingbute
), vous devez les rendre public
explicitement.