[c#] Quelle est la différence entre public, privé, protégé et rien?



6 Answers

Public - Si vous pouvez voir la classe, alors vous pouvez voir la méthode

Privé - Si vous faites partie de la classe, alors vous pouvez voir la méthode, sinon non.

Protégé - Même que Privé, plus tous les descendants peuvent également voir la méthode.

Statique (classe) - Rappelez-vous la distinction entre "Classe" et "Objet"? Oublie tout ça. Ils sont identiques avec "statique" ... la classe est l'instance unique de lui-même.

Statique (méthode) - Chaque fois que vous utilisez cette méthode, elle aura un cadre de référence indépendant de l'instance réelle de la classe dont elle fait partie.

Question

Toutes mes années d'université j'ai utilisé public , et aimerais connaître la différence entre public , private , et protected ?

Qu'est-ce que le static fait par opposition à ne rien avoir?




Repositionner les diagrammes impressionnants de cette réponse .

Voici tous les modificateurs d'accès dans les diagrammes de Venn, de plus restrictifs à plus promiscueux:

private :

private protected : - ajouté en C # 7.2

internal :

protected :

protected internal :

public :




mmm ...

Statique signifie que vous pouvez accéder à cette fonction sans avoir d'instance de la classe.

Vous pouvez accéder directement à partir de la définition de classe.




En ce qui concerne la question de Nothing

  • Les types d'espaces de noms sont internes par défaut
  • Tout membre de type, y compris les types imbriqués, est privé par défaut



Je pense que c'est lié à une bonne conception de POO. Si vous êtes un développeur d'une bibliothèque, vous voulez cacher le fonctionnement interne de votre bibliothèque. De cette façon, vous pourrez modifier le fonctionnement interne de votre bibliothèque plus tard. Vous mettez donc vos membres et vos méthodes d'assistance en privé, et seules les méthodes d'interface sont publiques. Les méthodes qui devraient être remplacées devraient être protégées.




Hmm.

Voir ici: Modificateurs d'accès .

En un mot:

Public donne à la méthode ou au type une visibilité complète à partir d'autres types / classes.

Private n'autorise que le type contenant la méthode / l'accès à la variable privée à la méthode / variable privée (notez que les classes imbriquées ont également accès aux classes / méthodes privées contenant les classes).

Protégé est similaire à privé sauf les classes dérivées peuvent également accéder à des méthodes protégées.

"Nothing" est l'équivalent de null de VB.NET. Bien que si vous faites référence à "rien" signifiant "aucun modificateur d'accès", alors cela dépend, bien qu'une règle empirique très grossière (certainement en C #) soit que si vous ne spécifiez pas explicitement un modificateur d'accès, la méthode / variable déclaration est généralement aussi limitée que possible. c'est à dire

public class MyClass
{
    string s = "";
}

est effectivement le même que:

public class MyClass
{
    private string s = "";
}

L'article MSDN lié offrira une description complète lorsqu'il n'y a aucun modificateur d'accès explicitement spécifié.




Ces modificateurs d'accès spécifient où vos membres sont visibles. Vous devriez probablement lire ceci. Prenez le lien donné par IainMH comme point de départ.

Les membres statiques sont un par classe et non un par instance.




Related