Junior
Quels sont les modificateurs d'accès en C#?
sobes.tech IA
Réponse de l'IA
En C# existent les modificateurs d'accès suivants :
- public : L'accès n'est pas limité. Les membres marqués comme
publicsont accessibles de n'importe où où leur type contenant est accessible. - private : L'accès est limité à leur type contenant. Les membres marqués comme
privatene sont accessibles que depuis le code à l'intérieur de la même classe ou structure. - protected : L'accès est limité au type qui le contient ou aux types dérivés de ce type. Les membres marqués comme
protectedsont accessibles à l'intérieur de leur classe et dans les classes dérivées. - internal : L'accès est limité à la compilation en cours (.dll ou .exe). Les membres marqués comme
internalsont accessibles de n'importe où dans la même compilation. - protected internal : L'accès est limité à la compilation en cours ou aux types dérivés du type qui le contient dans d'autres compilations. C'est une combinaison de
protectedetinternal. - private protected : L'accès est limité au type qui le contient ou aux types dérivés de ce type seulement dans la même compilation. C'est une combinaison de
privateetprotected.
// Exemple d'utilisation des modificateurs d'accès
public class MyClass
{
public int PublicField; // Accessible de n'importe où
private int PrivateField; // Accessible uniquement à l'intérieur de MyClass
protected int ProtectedField; // Accessible à l'intérieur de MyClass et dans les classes dérivées
internal int InternalField; // Accessible à l'intérieur de la compilation en cours
protected internal int ProtectedInternalField; // Accessible à l'intérieur de la compilation en cours OU dans les classes dérivées
private protected int PrivateProtectedField; // Accessible à l'intérieur de MyClass OU dans les classes dérivées dans cette même compilation
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Erreur - champ privé non accessible dans l'héritage
ProtectedInternalField = 40; // OK
PrivateProtectedField = 50; // OK
}
}
public class AnotherClassInSameAssembly
{
void AnotherMethod()
{
MyClass mc = new MyClass();
mc.PublicField = 1; // OK
mc.InternalField = 2; // OK
mc.ProtectedInternalField = 3; // OK
// mc.PrivateField = 4; // Erreur
// mc.ProtectedField = 5; // Erreur
// mc.PrivateProtectedField = 6; // Erreur
}
}