devstory

Modificateur d'accès (Access Modifier) en C#

  1. Modificateur dans CSharp
  2. Vue d'ensemble de access modifier
  3. private access modifier
  4. private constructor
  5. protected access modifier
  6. internal access modifier
  7. protected internal access modifier
  8. public access modifier
  9. Le modificateur d'accès et l'héritage

1. Modificateur dans CSharp

Les access modifiers dans CSharp précise l'accessibilité (Champ) d'une données de membre, de méthode, de constructeur (constructor) ou de classe.

Il y a 5 types de access modifiers dans CSharp:
  • private
  • protected
  • internal
  • protected internal
  • public

2. Vue d'ensemble de access modifier

Modificateur
(Modifier)
Description
private
L'accès est limité à la définition de classe. C'est le type de modificateur d'accès par défaut si aucun n'est formellement spécifié
protected
L'accès est limité à la définition de classe et à toute classe qui hérite de la classe.
internal
L'accès est limité exclusivement aux classes définies dans l'assemblage du projet actuel.
protected internal
L'accès est limité à l'assemblage actuel et aux types dérivés de la classe contenant. Tous les membres dans le projet actuel et tous les membres dans une classe dérivée peuvent accéder aux variables.
public
Il n'y a aucune restriction quant à l'accès aux membres publics (public).
Le tableau ci- dessous vous donne une vue d'ensemble de comment utiliser des access modifier.
Même Assembly
Assembly Différent
Accèss en classe
Accèss en package
Accèss à l'extérieur de parkage par sous-classe uniquement
Dans la sous classe
Hors de la sous classe
private
Y
protected
Y
Y
Y
internal
Y
Y
Y
protected internal
Y
Y
Y
public
Y
Y
Y
Y
Y
Vous pouvez voir plus en détails dans l'exemple ci-dessous:

3. private access modifier

private access modifier est accessible seulement dans la classe.
Vous ne pouvez acccéder au membre private en dehors de la classe qui définit ce membre-là. CSharp sẽ notifiera l'erreur à l'heure de compilation de la classe.

4. private constructor

Le constructeur (constructor), la méthode (method), le champ (field) sont reconnus comme les membres de la classe.
Si vous créez une classe et avoir un constructeur (constructor) dont le access modifier est private, vous ne pouvez pas créer un objet de cette classe de ce ledit private constructor en dehors de cette classe. Voyons un exemple d'illustration:

5. protected access modifier

protected access modifier peut accéder à l'intérieur du package, ou en dehors du package dans le cas où il hérite de cette classe.
protected access modifier peut être appliqué sur des données de field, method et constructor. Il ne peut pas être appliqué sur la class (class, interface, ..).

6. internal access modifier

internal est un modificateur d'accès, il n'est limité exclusivement d'accéder aux classes qui sont définies dans le projet courant Assembly.

Un Assembly est le résultat de compilation de votre code, généralement est un DLL, mais EXE est également considéré comme un assembly. Il est la plus petite unitéde déploiement pour tout projet .NET.

Assembly comprend généralement le code .NET dans MSIL (Microsoft Intermediate language - Langage intermédiaire) qui sera compilé au code indigène (Native code) ("JITted" - compilé par le compilateur Just-In-Time) pour la première fois, il est exécuté sur une machine donnée. Ce code compilé là sera aussi stocké dans Assembly et réutilisé pour des appels suivant.

7. protected internal access modifier

Le modificateur d'accès protected internal est une combinaison entre deux modificateur protected et internal, lorsqu' un membre de la classe possède ce modificateur d'accès, vous pouvez seulement accéder au ce membre dans la classe qui le définit ou dans des sous classes et il est compris dans un Assembly.

8. public access modifier

public access modifier est accessible n'import quel lieu. Il a la portée la plus étendue parmi tous les autres modifier.

9. Le modificateur d'accès et l'héritage

Dans CSharp vous pouvez remplacer (override) une méthode (method) de la superclasse par la méthode de même nom et de mêmes paramètres, renvoie le type dans la sous-classe, mais vous n'êtes pas autorisé de changer son modificateur d'accès (access modifier).
Cependant, vous pouvez créer une méthode avec le même nom, les même paramètres, renvoie le typem mais de différents niveaux d'accessibilité lorsque vous utilisez le nouveau mot de pass. En effet, le fait est qu'une méthode différente est sans rapport avec la méthode de la classe mère.
La différence entre override et new ont été expliquées dans le document "L'héritage et le polymorphisme dans CSharp" vous pouvez le voir à: