Junior
Ce modificatori de acces există în C#?
sobes.tech AI
Răspuns de la AI
În C# există următorii modificatori de acces:
- public: Accesul nu este restricționat. Membrii marcați ca
publicsunt accesibili din orice loc unde este accesibil tipul lor conținător. - private: Accesul este restricționat la tipul lor conținător. Membrii marcați ca
privatesunt accesibili doar din codul din interiorul aceleiași clase sau structuri. - protected: Accesul este restricționat la tipul care îl conține sau la tipurile derivate din acesta. Membrii marcați ca
protectedsunt accesibili în interiorul clasei și în clasele moștenitoare. - internal: Accesul este restricționat la compilarea curentă (.dll sau .exe). Membrii marcați ca
internalsunt accesibili din orice loc în interiorul aceleiași compilări. - protected internal: Accesul este restricționat la compilarea curentă sau la tipurile derivate ale tipului care îl conține în alte compilări. Este o combinație de
protectedșiinternal. - private protected: Accesul este restricționat la tipul care îl conține sau la tipurile derivate ale acestuia doar în aceeași compilare. Este o combinație de
privateșiprotected.
// Exemplu de utilizare a modificatorilor de acces
public class MyClass
{
public int PublicField; // Accesibil din orice loc
private int PrivateField; // Accesibil doar în interiorul MyClass
protected int ProtectedField; // Accesibil în interiorul MyClass și în clasele moștenitoare
internal int InternalField; // Accesibil în interiorul compilării curente
protected internal int ProtectedInternalField; // Accesibil în interiorul compilării curente SAU în clasele moștenitoare
private protected int PrivateProtectedField; // Accesibil în interiorul MyClass SAU în clasele moștenitoare în aceeași compilare
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Eroare - câmp privat nu este accesibil în moștenire
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; // Eroare
// mc.ProtectedField = 5; // Eroare
// mc.PrivateProtectedField = 6; // Eroare
}
}