Modificateurs d'accès internes ou privés

Réponses:

516

interne est pour la portée de l'assembly (c'est-à-dire accessible uniquement à partir du code dans le même .exe ou .dll)

private est pour la portée de la classe (c'est-à-dire accessible uniquement à partir du code de la même classe).

explorateur
la source
6
J'ai une petite question; si je déclare une classe privée dans un espace de noms au sein d'un assembly par rapport à la classe interne, je peux accéder à cette classe dans l'assembly dans les deux cas, alors quelle est la différence entre une classe privée et une classe interne? ou des modificateurs privés et internes en termes de classes sont-ils utilisés lors de l'imbrication de la classe dans la classe?
Mayotic
2
J'ai ajouté le projet / assemblage spécifique comme référence d'un autre projet et les deux privés et internes m'empêchent d'accéder à cette classe particulière dans l'espace de noms, alors là encore ... la différence entre les classes privées et internes est? merci
mayotic
9
Vous ne pouvez pas déclarer une classe de niveau supérieur comme privée. Le compilateur vous arrêtera.
TheGateKeeper
6
@NetSkay: Si vous déclarez une classe privée à l'intérieur d'une classe publique, cette classe n'est pas accessible par les autres classes de votre assembly, mais si vous déclarez cette classe comme interne, elle sera accessible dans l'assembly. Cependant, ils ne seront pas accessibles tous les deux en dehors de l'assemblage.
Yogesh Jindal
2
Si vous venez d'un arrière-plan VB.NET, le mot clé "interne" de C # est équivalent au mot clé "Friend" de VB.NET.
Brain2000
207

Trouvez une explication ci-dessous. Vous pouvez consulter ce lien pour plus de détails - http://www.dotnetbull.com/2013/10/public-protected-private-internal-access-modifier-in-c.html

Privé: - Les membres privés ne sont accessibles que dans le propre type (classe propre).

Interne: - Les membres internes sont accessibles uniquement au sein de l'assembly par héritage (son type dérivé) ou par instance de classe.

entrez la description de l'image ici

Référence :

dotnetbull - qu'est-ce qu'un modificateur d'accès en c #

Vivek
la source
17
Intéressant qui Protected Internaloffre un accès plus large que Protected.
Dan Bechard
9
@Dan, entièrement d'accord. Il pourrait être utile de lire et de penser protected internalà protected OR internal.
chessofnerd
7
Que veut With Typedire?
James Wierzba
@Dan ouais, j'ai supposé que cela agirait simplement comme une table de vérité et ANDque la matrice pour true | false | false | false pour protected internal. pas intuitif. à la place, c'est vrai | vrai | vrai | faux comme si OR'd.
ferr
1
Soit dit en passant, C # 7.2 vient d'ajouter un modificateur «protégé ET interne», bien que les mots clés réels choisis private protectedne soient pas très intuitifs. Pour plus de détails: docs.microsoft.com/en-us/dotnet/csharp/language-reference/…
Joe Sewell
70

internalles membres sont visibles pour tout le code de l'assembly dans lequel ils sont déclarés.
(Et pour les autres assemblys référencés à l'aide de l' [InternalsVisibleTo]attribut )

privateles membres ne sont visibles que par la classe déclarante. (y compris les classes imbriquées)

Une classe externe (non imbriquée) ne peut pas être déclarée private, car il n'y a pas d'étendue contenant pour la rendre privée.

Pour répondre à la question que vous avez oublié de poser, les protectedmembres sont comme des privatemembres, mais sont également visibles dans toutes les classes qui héritent du type déclarant. (Mais uniquement sur une expression d'au moins le type de la classe actuelle)

SLaks
la source
8

private - encapsulations dans class / scope / struct ect '.

interne - encapsulation dans les assemblages.

Yaniv Lugassy
la source
6

Les membres privés ne sont accessibles que dans le corps de la classe ou la structure dans laquelle ils sont déclarés.

Les types ou membres internes sont accessibles uniquement dans les fichiers du même assembly

Jesper Fyhr Knudsen
la source
alors quelle est la différence dans l'utilisation de cela? je ne comprends toujours pas: X
deadfish
4
Private est accessible depuis l'intérieur de la classe uniquement, Internal est accessible depuis l'intérieur de l'assembly (projet en VS ie fichier dll / exe).
Jesper Fyhr Knudsen
3

Interne vous permettra de référencer, par exemple, une classe statique d'accès aux données (pour la sécurité des threads) entre plusieurs classes de logique métier, sans les abonner pour hériter de cette classe / du voyage les unes sur les autres dans les pools de connexions, et pour éviter au final d'autoriser une classe DAL promouvoir l'accès au niveau public. Cela a d'innombrables soutiens dans la conception et les meilleures pratiques.

Entity Framework fait bon usage de ce type d'accès

Nathan Teague
la source
0

les membres internes sont accessibles au sein de l'assembly (uniquement accessible dans le même projet)

les membres privés sont accessibles dans la même classe

Exemple pour les débutants

Il y a 2 projets dans une solution (Project1, Project2) et Project1 a une référence à Project2.

  • La méthode publique écrite dans Project2 sera accessible dans Project2 et Project1
  • La méthode interne écrite dans Project2 sera accessible uniquement dans Project2 mais pas dans Project1
  • La méthode privée écrite dans la classe 1 de Project2 ne sera accessible qu'à la même classe. Il ne sera ni accessible dans les autres classes du projet 2 pas dans le projet 1.
Salik
la source