192 votes

Visibilité par défaut pour les classes et les membres (champs, méthodes, etc.) de C# ?

J'essaie de trouver une référence pour la visibilité par défaut de divers aspects du C#. Types de classes, champs, méthodes, enums, etc.

Quelqu'un peut-il fournir une liste de ces éléments ainsi que leur visibilité par défaut (c'est-à-dire sans modificateur préfixé) ?

0 votes

10 votes

Je ne considérerais pas qu'il s'agit d'un doublon... cette question est spécifique (Quelle est la valeur par défaut pour CECI ?), celle-ci est générale (Quelles sont TOUTES les valeurs par défaut ?).

297voto

Oded Points 271275

Toutes les informations que vous recherchez se trouvent à l'adresse suivante aquí y aquí (merci Reed Copsey ):

Du premier lien :

Classes et structs qui sont déclarées directement dans un espace de nom (en d'autres termes, qui ne sont pas imbriquées dans d'autres classes ou structures) peuvent être soit publiques soit internes. Internal 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 membres de la structure y compris les classes et les structures imbriquées, est le suivant privé par défaut .

...

interfaces par défaut interne accès.

...

Délégués se comportent comme des classes et des structures. Par défaut, ils ont l'accès interne lorsqu'il est déclaré directement dans un espace de nom, et l'accès privé lorsqu'il est imbriqué. .


Du deuxième lien :

Types de haut niveau qui ne sont pas imbriqués dans d'autres types, ne peuvent avoir qu'une accessibilité interne ou publique. Le site 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

7 votes

Une belle compilation à partir des informations de Reed, mais vous avez oublié de préciser que ces modificateurs d'accès s'appliquent également aux méthodes.

7 votes

@Joel Que voulez-vous dire ? Il indique clairement "membres". Les membres étant des données et des comportements et incluant donc les méthodes.

1 votes

Au cas où des développeurs vb.net se pencheraient sur cette question, vb est différent. La portée par défaut des membres des classes vb est Public . Enum Les membres sont également Public . Il est probablement plus simple d'utiliser la portée explicite dans votre cas, car il y a de fortes chances qu'il soit traduit ou lu par des développeurs C# à un moment donné. La génération de code en vb.net ne fait pas cela pour vous, malheureusement.

18voto

Nick Miller Points 353

De MSDN :

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


Types imbriqués qui sont des membres d'autres types, peuvent avoir des accessibilités déclarées comme indiqué dans le tableau suivant.

Les membres de

Accessibilité des membres par défaut

Accessibilité déclarée autorisée du membre

enum

public

Aucun

class

private

public
protected
internal
private
protected internal
private protected

interface

public

public
protected
internal
private *
protected internal
private protected

struct

private

public
internal
private

* Un interface membre avec private l'accessibilité doit avoir une implémentation par défaut.

Source : Niveaux d'accessibilité (référence C#) (15 septembre th , 2021)

12voto

mrk Points 31

Par défaut, le modificateur d'accès pour une classe est internal . Cela signifie qu'une classe est accessible au sein de la même assemblée. Mais si nous voulons que la classe soit accessible depuis d'autres assemblages, elle doit être rendue publique.

23 votes

Cette information était déjà présente dans les autres réponses. Vous ne devriez répondre à une question, surtout si elle est ancienne comme celle-ci, que si vous avez des informations supplémentaires à fournir ou si vous pensez que les autres réponses sont fausses. Quoi qu'il en soit, bienvenue sur Stack Overflow.

2 votes

Une classe ne doit pas nécessairement être rendue publique pour être rendue accessible à d'autres assemblées. On pourrait utiliser la classe InternalsVisibleToAttribute [assembly:InternalsVisibleTo("Friend1b")]

0voto

Svisstack Points 9001

Par défaut, c'est private . A moins qu'elles ne soient imbriquées, les classes sont internal .

2 votes

Les enums ne sont-ils pas publics par défaut ?

5 votes

Sauf s'ils sont imbriqués. @Ryan : Non, les enums non imbriqués sont internes par défaut.

2 votes

@Ryan : Les membres d'un enum sont publics par défaut, mais l'enum lui-même est interne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X