web-dev-qa-db-fra.com

méthode sans modificateur d'accès

Ok, ça me dérange .. Je sais que je l'ai lu quelque part et que Google ne m'aide pas.

Quel est le niveau d'accessibilité d'une méthode qui ne spécifie pas de modificateur d'accès?

void Foo()
{
    //code
} 

Je veux dire internal mais je ne suis pas sûr à 100%.

38
Leroy Jenkins

L'accessibilité par défaut pour un type est internal, mais l'accessibilité par défaut de ce type membres dépend du type.

En règle générale, les membres de class sont private par défaut, alors que les membres de struct sont public par défaut. Cela varie selon la langue. Les modificateurs d'accès aux structures par défaut pour C++ sont publics, tandis que pour C #, ils sont privés.

41
Steve Guidi

En supposant que ceci soit une méthode C #, puisque vous avez la balise ".net".

Les gens doivent faire la distinction entre l'accessibilité «membre» et l'accessibilité «classe».

18
Minyu

Oui, internal est la valeur par défaut pour les classes, mais private est la valeur par défaut pour les membres.

16
EMP

Pour une classe: Interne est la valeur par défaut si aucun modificateur d'accès n'est spécifié.

Pour une méthode: Privé est la valeur par défaut si aucun modificateur d'accès n'est spécifié.

9
Secko

Extrait de Langage de programmation C #, Troisième édition de Anders Hejlsberg et al, section 10.3.5 ("Membres de la classe - Modificateurs d'accès"), page 434:

Une class-member-declaration peut avoir l'un des cinq types d'accessibilité déclarés possibles (§3.5.1): public, protected internal, protected, internal ou private. À l'exception de la combinaison protected internal, la spécification de plusieurs modificateurs d'accès est une erreur de compilation. Lorsqu'un déclaration de membre de classe n'inclut aucun modificateur d'accès, on prend private. [mine d'assistance]

Et ensuite à la section 11.2 ("Membres de la structure") à la page 539:

À l'exception des différences notées au § 11.3, les descriptions des membres du groupe fournies aux § 10.3 à 10.14 s'appliquent également aux membres de la structure.

La section 11.3 ne mentionne rien sur les modificateurs d'accès, ma lecture implique donc que les membres d'une struct sans modificateur d'accès sont également private par défaut. Cela correspond à ce que dit MSDN et à ma propre expérience.

5
Daniel Pryden

Oh, attends, il y a encore une chose ...

Les déclarations de méthode interface sont bien sûr public par définition. Donc, l'implémentation suivante est public, sans modificateur d'accès explicite.

public class MyClass : IEqualityComparer<MyClass>
    bool IEqualityComparer<MyClass>.Equals(MyClass x , MyClass y) {}
}
3
radarbob

espérons que cela clarifie tout selon la capture d'écran directement à partir de MSDN

 enter image description here

0
pixel

Les méthodes de classe sont privées et scellées par défaut dans .NET. Cela signifie que la méthode est uniquement visible dans la classe et ne peut pas être remplacée par la classe héritée. 

0
HaohaoLin