Erreur “Les éléments définis dans un espace de noms ne peuvent pas être déclarés explicitement comme privés, protégés ou internes protégés”

J’ai essayé de rendre une classe privée et j’ai eu cette erreur “Les éléments définis dans un espace de noms ne peuvent pas être explicitement déclarés comme privés, protégés ou internes protégés”

J’ai eu sa signification mais je veux demander pourquoi ce n’est pas permis? Tous les modifires d’access ne sont-ils pas applicables sur Class? Pourquoi je ne peux pas rendre une classe privée, protégée ou protégée interne?

Car private signifie que le membre est uniquement visible dans la classe contenant. Comme une classe de niveau supérieur ne contient aucune classe, elle ne peut pas être privée (ou protégée). (Les modificateurs internes ou publics sont cependant valides).

Que voulez-vous dire privé sur une classe de premier niveau?

Bien entendu, tous les modificateurs s’appliquent aux classes nestedes, c’est-à-dire à une classe définie dans une autre classe.

Vous ne pouvez utiliser que public ou internal au niveau de l’espace de noms

Parce que ça n’a pas de sens. Il est impossible d’accéder aux classes protégées ou privées définies au niveau de l’espace de noms, uniquement en tant que classes nestedes.

Seules les classes nestedes peuvent être déclarées comme privées. Les classes non nestedes ne peuvent être que publiques ou internes (implicites sans modificateurs)

Comme l’a dit Abatonime , vous ne pouvez utiliser que public ou internal au niveau de l’espace de noms.
private , protected ou protected internal ne peut être utilisé qu’au niveau de la classe.

Cela marche

 namespace X { class A { // class code here private class B { // class code here } } } 

Cela ne va pas

 namespace X { class A { // class code here } private class B { // class code here } } 

J’ai eu ce même problème parce que je créais une DLL personnalisée et je voulais seulement que certaines classes soient visibles par une application utilisant la DLL. Je retire donc complètement le modificateur pour les classes que je voulais être privé (dans des espaces de noms spécifiques). Les classes sont restées accessibles aux autres classes dans le même espace de noms de la DLL, mais ne sont pas apparues dans Intellisense dans l’application appelante. Pas besoin de classes nestedes. La seule explication à laquelle je peux penser est que le message d’erreur indique qu’il ne peut pas déclarer “explicitement” privé … il ne dit rien implicitement.

 namespace SmartCardAuthentication { class SmartCardIdentity : IIdentity { private ssortingng _firstName; private ssortingng _lastName; private ssortingng _middleInitial; .... } } 

Dans l’exemple de code ci-dessus, la classe “SmartCardIdentity” est disponible pour les autres classes dans le même espace de noms, mais n’est pas disponible pour appeler l’application lorsque cette classe est intégrée à une DLL. Je ne l’ai pas testé d’une autre manière (ex: visibilité depuis une classe dans un espace de nommage différent dans la DLL).

L’accessibilité par défaut des types de niveau supérieur est internal .

L’accessibilité par défaut des membres de classe et de structure est private .

La seule accessibilité possible des membres d’interface et d’énum est public .

Ainsi, une classe est private par défaut et si vous voulez y accéder, vous devez la publier avant cela.

Seuls Public et Internal sont applicables lors de la définition de la classe. Si aucun modificateur d’access n’est défini avant que la classe par défaut soit interne .

se référer à MSDN – [ https://msdn.microsoft.com/en-us/library/8fd16xs0(v=vs.90).aspx]