Quel est le modificateur d’accès par défaut pour les classes, méthodes, membres, constructeurs, délégués et interfaces ?
Réponses
Trop de publicités?L'accès par défaut pour le tout en C# est "le plus accès restreint vous pouvez déclarer pour ce membre".
Ainsi, par exemple:
namespace MyCompany
{
class Outer
{
void Foo() {}
class Inner {}
}
}
est équivalent à
namespace MyCompany
{
internal class Outer
{
private void Foo() {}
private class Inner {}
}
}
Une sorte d'exception à cela est de faire une partie d'une propriété (généralement le setter) plus restreint que l'a déclaré l'accessibilité de la propriété elle-même:
public string Name
{
get { ... }
private set { ... } // This isn't the default, have to do it explicitly
}
C'est ce que le C# 3.0 spécification a à dire (section 3.5.1):
Selon le contexte dans lequel un déclaration d'un membre de lieu, seulement certains types d'déclaré l'accessibilité sont autorisés. En outre, lorsqu'une déclaration d'un membre de ne pas inclure les modificateurs d'accès, le contexte dans lequel la déclaration lieu détermine la valeur par défaut déclaré à l'accessibilité.
- Les espaces de noms implicitement le public, d'avoir déclaré l'accessibilité. Pas d'accès les modificateurs sont autorisés sur l'espace de noms les déclarations.
- Les Types déclarés dans les unités de compilation ou les espaces de noms peuvent avoir public ou interne déclaré l'accessibilité et défaut interne déclaré l'accessibilité.
- Les membres de la classe peuvent avoir l'un des cinq types d'déclaré l'accessibilité et à défaut de privé déclaré l'accessibilité. (À noter qu'un type déclarée en tant que membre d'une classe peut avoir l'un des cinq types de déclaré l'accessibilité, alors qu'un type déclaré en tant que membre d'un espace de noms peut avoir seulement, publiques ou internes déclaré l'accessibilité.)
- Struct que peuvent avoir les membres du public, interne ou privé déclaré l'accessibilité et la valeur par défaut privé a déclaré l'accessibilité, parce que les structures sont implicitement scellé. Les membres de la structure introduit dans une struct (qui est, non pas héritée par cette structure) ne peut pas avoir protégés ou interne protégée déclaré à l'accessibilité. (À noter qu'un type déclarée en tant que membre d'une struct peut avoir du public, interne ou privé a déclaré l'accessibilité, alors qu'un type déclarée en tant que membre d'un espace de noms ne peut avoir qu'public ou interne a déclaré l'accessibilité.)
- Les membres Interface implicitement le public, d'avoir déclaré l'accessibilité. Pas de modificateurs d'accès sont autorisés sur interface déclarations de membre.
- Membres de l'énumération implicitement le public, d'avoir déclaré l'accessibilité. Pas de modificateurs d'accès sont autorisés sur l'énumération déclarations de membre.
(Notez que les types imbriqués dans les "membres du groupe" ou "les membres de la structure des pièces" - et, par conséquent, par défaut privé de visibilité.)
Réponse courte: le minimum possible de l'accès (cf Jon Skeet de réponse).
Réponse longue:
Non imbriquée types, de dénombrement et d'délégué accessibilité (ne peut avoir en interne ou de l'accessibilité du public)
| Default | Permitted declared accessibilities ------------------------------------------------------------------ namespace | public | none (always implicitly public) enum | public | none (always implicitly public) interface | internal | public, internal class | internal | public, internal struct | internal | public, internal delegate | internal | public, internal
Imbriquée type et membre accessiblities
| Default | Permitted declared accessibilities ------------------------------------------------------------------ namespace | public | none (always implicitly public) enum | public | none (always implicitly public) interface | public | none class | private | All¹ struct | private | public, internal, private² delegate | private | All¹ constructor | private | All¹ interface member | public | none (always implicitly public) method | private | All¹ field | private | All¹ user-defined operator| none | public (must be declared public)
1 Tous === public, protégé, privé interne, interne protégée
2 les structures ne peuvent pas hériter de leurs structures ou classes (bien qu'ils puissent, interfaces), donc protégées n'est pas valide modificateur
L'accessibilité d'un type imbriqué dépend de son accessibilité domaine, qui est à la fois déterminée par la déclaration de l'accessibilité du membre et de l'accessibilité de domaine immédiatement le type de contenant. Toutefois, l'accessibilité de domaine d'un type imbriqué ne peut pas dépasser celle de la type contenant.
Note: CIL a également la provision pour protégé et interne (par opposition à l'protégées existantes "ou" interne), mais à ma connaissance ce n'est actuellement pas disponible pour une utilisation en C#.
Voir:
http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
http://msdn.microsoft.com/en-us/library/ms173121.aspx
http://msdn.microsoft.com/en-us/library/cx03xt0t.aspx
(L'homme que j'aime Microsoft Uri...)
Jetez un oeil à des Modificateurs d'Accès (Guide de Programmation C#)
La classe et la Structure de l'Accessibilité
Interne est la valeur par défaut si aucun accès modificateur est spécifié.Classe et Struct Membre de l'Accessibilité
Les membres de la classe (y compris les classes imbriquées et les structures) peut être déclarée avec l'un des cinq types d'accès. Les membres de la structure ne peut pas être déclarée protégée parce que les structures ne prennent pas en charge l'héritage.L'accessibilité d'un membre peut ne jamais être supérieure à la l'accessibilité de son type contenant
Défini par l'utilisateur, les opérateurs doivent toujours être déclarée public. Pour plus d' d'informations, consultez l'opérateur (C# De référence).
Les destructeurs ne peut pas avoir d'accessibilité les modificateurs.
D'Autres Types De
Les Interfaces déclarées directement avec un espace de noms peut être déclarée comme public ou interne et comme pour les classes et les structures, interfaces par défaut à l'accès interne.Membres de l'énumération sont toujours publics, et pas de modificateurs d'accès peut être appliqués.
Par défaut, les délégués ont interne d'accès.