Junior
Quali sono i modificatori di accesso in C#?
sobes.tech AI
Risposta dell'AI
In C# esistono i seguenti modificatori di accesso:
- public: L'accesso non è limitato. I membri contrassegnati come
publicsono accessibili da qualsiasi luogo in cui il loro tipo contenitore è accessibile. - private: L'accesso è limitato al loro tipo contenitore. I membri contrassegnati come
privatesono accessibili solo dal codice all'interno della stessa classe o struttura. - protected: L'accesso è limitato al tipo che lo contiene o ai tipi derivati da esso. I membri contrassegnati come
protectedsono accessibili all'interno della loro classe e nelle classi derivate. - internal: L'accesso è limitato alla compilazione corrente (.dll o .exe). I membri contrassegnati come
internalsono accessibili da qualsiasi luogo all'interno della stessa compilazione. - protected internal: L'accesso è limitato alla compilazione corrente o ai tipi derivati del tipo che lo contiene in altre compilazioni. È una combinazione di
protectedeinternal. - private protected: L'accesso è limitato al tipo che lo contiene o ai tipi derivati di quel tipo solo nella stessa compilazione. È una combinazione di
privateeprotected.
// Esempio di utilizzo dei modificatori di accesso
public class MyClass
{
public int PublicField; // Accessibile da qualsiasi luogo
private int PrivateField; // Accessibile solo all'interno di MyClass
protected int ProtectedField; // Accessibile all'interno di MyClass e nelle classi derivate
internal int InternalField; // Accessibile all'interno della compilazione corrente
protected internal int ProtectedInternalField; // Accessibile all'interno della compilazione corrente O nelle classi derivate
private protected int PrivateProtectedField; // Accessibile all'interno di MyClass O nelle classi derivate in questa stessa compilazione
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Errore - campo privato non accessibile in ereditarietà
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; // Errore
// mc.ProtectedField = 5; // Errore
// mc.PrivateProtectedField = 6; // Errore
}
}