2010-09-21 4 views
132

J'essaie de trouver une référence pour la visibilité par défaut de divers aspects de C#. Types de classe, champs, méthodes, énumérations, etc.Visibilité par défaut pour les classes C# et les membres (champs, méthodes, etc.)?

Quelqu'un peut-il fournir une liste de ceux-ci avec leur visibilité par défaut (c.-à-d. Aucun modificateur préfixé)?

+0

double possible de [modificateur d'accès par défaut dans C#] (http://stackoverflow.com/questions/3675575/default -access-modificateur-en-c) –

+8

Je ne considérerais pas cela comme un doublon ... cette question est spécifique (Quelle est la valeur par défaut pour CE?), celle-ci est large (Quelles sont toutes les valeurs par défaut?) – WernerCD

Répondre

206

Toutes les informations que vous recherchez peut être trouvé here et here (merci Reed Copsey):

Dès le premier lien:

Classes et structs qui sont déclarés directement dans un espace de noms (en d'autres termes, qui ne sont pas imbriqués dans d'autres classes ou structures) peut être public ou interne. Interne est la valeur par défaut si aucun modificateur d'accès n'est spécifié.

...

Le niveau d'accès pour membres de la classe et les membres struct, y compris les classes imbriquées et struct, est privée par défaut.

...

interfaces par défaut pour accès interne.

...

Les délégués se comportent comme des cours et struct. Par défaut, ils ont l'accès interne lorsqu'ils sont déclarés directement dans un espace de noms, et l'accès privé lorsqu'ils sont imbriqués.


A partir du second lien:

types de haut niveau, qui ne sont pas imbriqués dans d'autres types, ne peuvent avoir accès interne ou public. L'accessibilité par défaut pour ces types est interne.

Et pour les types imbriqués:

 
Members of Default member accessibility 
---------- ---------------------------- 
enum   public 
class   private 
interface  public 
struct  private 
+5

Une belle compilation de l'information de Reed, mais vous avez oublié de spécifier que de tels modificateurs d'accès s'appliquent également aux méthodes. – Joel

+2

@Joel Que voulez-vous dire? Il déclare clairement "membres". Les membres étant des données et des comportements et donc inclusifs de méthodes. – rism

+0

Dans le cas où les développeurs de vb.net regardent cela, vb est différent. La portée par défaut des membres de la classe vb est 'Public'. Les membres 'Enum' sont aussi' Public'. Probablement moins déroutant d'utiliser simplement une portée explicite dans votre cas, car les chances sont élevées qu'il sera traduit ou lu par les développeurs de C# à un moment donné. La génération de code dans vb.net ne le fait pas pour vous, malheureusement. – toddmo

-1

Par défaut, private. À moins qu'ils ne soient imbriqués, les classes sont internal.

+1

ne sont pas enums public par défaut? –

+4

@Jay: À moins qu'ils ne soient imbriqués. @Ryan: Non, les énumérations non imbriquées sont internes par défaut. –

+2

@Ryan: Les membres Enum sont publics par défaut, mais l'énumération elle-même est interne. –

7

Par défaut, le modificateur d'accès pour une classe est internal. Cela veut dire qu'une classe est accessible dans le même assemblage. Mais si nous voulons que la classe soit accessible à partir d'autres assemblées, elle doit être rendue publique.

+17

Cette information était déjà présente dans les autres réponses. Vous ne devez répondre à une question, en particulier une ancienne que celle-ci, lorsque vous avez des informations supplémentaires à fournir ou que vous pensez que les autres réponses sont erronées. Quoi qu'il en soit, bienvenue à Stack Overflow. – Gorpik

2

De MSDN:

types de haut niveau, qui ne sont pas imbriqués dans d'autres types, ne peuvent avoir internal ou public accessibilité. L'accessibilité par défaut pour ces types est internal.


types emboîtés, qui sont membres d'autres types, peuvent avoir déclaré accessibilités comme indiqué dans le tableau suivant.

Default Nested Member Accessibility & Allowed Accessibility Modifiers

Source: Accessibility Levels (C# Reference) (6 Décembre ème 2017)

Questions connexes