Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Langue C

Comprendre les modificateurs d'accès C# : Public, Private, Protected, Internal et plus

Comprendre les modificateurs d'accès C#

Ce guide explique comment les différents modificateurs d'accès C# — public, private, protected, internal, protected internal et private protected — contrôlent la visibilité des types et membres. Des exemples de code réels illustrent l'effet de chaque modificateur.

En C#, les modificateurs d'accès déterminent qui peut lire ou écrire des champs, appeler des méthodes ou instancier des types. Par exemple :

class Etudiant {
    public string nom;
    private int num;
}

Ici, nom est visible partout, alors que num est confiné à la classe Etudiant.

Types de modificateurs d'accès


1. Modificateur d'accès Public

Marquer un type ou membre comme public le rend accessible depuis tout code qui peut référencer l'assembly.

using System;
namespace MyApplication {
    class Etudiant {
        public string nom = "Sheeran";
        public void Afficher() {
            Console.WriteLine("Bonjour depuis la classe Etudiant");
        }
    }
    class Program {
        static void Main(string[] args) {
            Etudiant etudiant1 = new Etudiant();
            Console.WriteLine("Nom : " + etudiant1.nom);
            etudiant1.Afficher();
            Console.ReadLine();
        }
    }
}

Sortie

Nom : Sheeran
Bonjour depuis la classe Etudiant

Puisque le champ et la méthode sont public, la classe Program peut y accéder librement.

Astuce : L'objet etudiant1 est utilisé pour accéder aux membres de Etudiant. En savoir plus sur Classes et objets C#.


2. Modificateur d'accès Private

Un membre private n'est visible que dans sa classe ou struct déclarant. Le code externe, de tels membres déclenchent des erreurs de compilation.

using System;
namespace MyApplication {
    class Etudiant {
        private string nom = "Sheeran";
        private void Afficher() {
            Console.WriteLine("Bonjour depuis la classe Etudiant");
        }
    }
    class Program {
        static void Main(string[] args) {
            Etudiant etudiant1 = new Etudiant();
            Console.WriteLine("Nom : " + etudiant1.nom);
            etudiant1.Afficher();
            Console.ReadLine();
        }
    }
}

Tenter d'accéder à nom ou Afficher depuis Program résulte en :

CS0122 'Etudiant.nom' est inaccessible en raison de son niveau de protection
CS0122 'Etudiant.Afficher()' est inaccessible en raison de son niveau de protection

3. Modificateur d'accès Protected

Les membres marqués protected sont accessibles dans leur propre classe et toutes les classes dérivées, indépendamment de l'assembly.

using System;
namespace MyApplication {
    class Etudiant {
        protected string nom = "Sheeran";
    }
    class Program : Etudiant {
        static void Main(string[] args) {
            Program program = new Program();
            Console.WriteLine("Nom : " + program.nom);
            Console.ReadLine();
        }
    }
}

Sortie

Nom : Sheeran

Ici, Program hérite de Etudiant, lui permettant d'accéder au champ nom protégé.


4. Modificateur d'accès Internal

Un membre internal n'est visible que dans le même assembly — une unité logique de code compilé. Les assemblies sont créés par le compilateur quand vous construisez un projet.

Dans un seul assembly :

using System;
namespace Assembly {
    class Etudiant {
        internal string nom = "Sheeran";
    }
    class Program {
        static void Main(string[] args) {
            Etudiant theEtudiant = new Etudiant();
            Console.WriteLine("Nom : " + theEtudiant.nom);
            Console.ReadLine();
        }
    }
}

Sortie

Nom : Sheeran

Quand le même assembly essaie d'accéder au champ, il se comporte comme public car les membres internal sont partagés dans tout l'assembly.

Dans un assembly différent, le champ est inaccessible :

// Assembly1
using System;
namespace Assembly1 {
    public class NomEtudiant {
        internal string nom = "Sheeran";
    }
}
// Assembly2
using System;
using Assembly1;
namespace Assembly2 {
    class Program {
        static void Main(string[] args) {
            NomEtudiant etudiant = new NomEtudiant();
            Console.Write(etudiant.nom); // CS0122
            Console.ReadLine();
        }
    }
}

Tenter de compiler Assembly2 produit :

CS0122 'NomEtudiant.nom' est inaccessible en raison de son niveau de protection

5. Modificateur d'accès Protected Internal

La combinaison protected internal permet l'accès depuis le même assembly ou depuis des types dérivés dans d'autres assemblies.

// Assembly1
using System;
namespace Assembly1 {
    public class Salutation {
        protected internal string msg = "Bonjour";
    }
}
// Assembly2
using System;
using Assembly1;
namespace Assembly2 {
    class Program : Salutation {
        static void Main(string[] args) {
            Program salutation = new Program();
            Console.Write(salutation.msg);
            Console.ReadLine();
        }
    }
}

Sortie

Bonjour

6. Modificateur d'accès Private Protected

Introduit en C# 7.2, private protected restreint la visibilité à la classe déclarante et ses classes dérivées dans le même assembly.

// Assembly1
using System;
namespace Assembly1 {
    public class NomEtudiant {
        private protected string nom = "Sheeran";
    }
    class Program1 : NomEtudiant {
        static void Main(string[] args) {
            Program1 etudiant = new Program1();
            Console.Write(etudiant.nom);
            Console.ReadLine();
        }
    }
}
// Assembly2
using System;
using Assembly1;
namespace Assembly2 {
    class Program : NomEtudiant {
        static void Main(string[] args) {
            Program etudiant = new Program();
            Console.Write(etudiant.nom); // CS0122
            Console.ReadLine();
        }
    }
}

L'accès depuis Assembly2 échoue car le membre n'est pas exposé au-delà de son assembly, même dans les types dérivés.

Note : Alors que les types (classes, interfaces, etc.) peuvent utiliser public et internal, tous les autres modificateurs s'appliquent seulement aux membres.

Langue C

  1. Classes et objets C# : Fondations pour une POO robuste
  2. Mot-clé Static C# : Maîtriser les variables, méthodes et classes statiques
  3. Maîtriser les classes et méthodes abstraites C# : Guide pratique
  4. Comprendre les classes imbriquées C# : Définition, utilisation et héritage
  5. Comprendre les classes et méthodes partielles C#
  6. Maîtriser les classes et méthodes sealed en C# : Quand les utiliser, exemples clairs et sécurité du code
  7. Maîtriser les templates de classe en C++ : Guide pratique
  8. Comprendre les classes de stockage en C : Portée, durée de vie et performance
  9. Modificateurs Java Expliqués : Types, Utilisation et Bonnes Pratiques