Junior
Milyen hozzáférési módosítók vannak C#-ban?
sobes.tech MI
Válasz az MI-től
C# nyelvben a következő hozzáférési módosítók léteznek:
- public: A hozzáférés nem korlátozott. A
public-ként megjelölt tagok bárhonnan elérhetők, ahol a tartalmazó típus elérhető. - private: A hozzáférés a tartalmazó típusra korlátozódik. A
private-ként megjelölt tagok csak ugyanabban a osztályban vagy struktúrában lévő kódból érhetők el. - protected: A hozzáférés a tartalmazó típusra vagy annak leszármazott típusaira korlátozódik. A
protected-ként megjelölt tagok az osztályon belül és a leszármazott osztályokban érhetők el. - internal: A hozzáférés a jelenlegi összeszerelésre (.dll vagy .exe) korlátozódik. Az
internal-ként megjelölt tagok bárhonnan elérhetők ugyanabban az összeszerelésben. - protected internal: A hozzáférés a jelenlegi összeszerelésre vagy a tartalmazó típusból származó típusokra korlátozódik más összeszerelésekben. Ez a
protectedésinternalkombinációja. - private protected: A hozzáférés a tartalmazó típusra vagy annak leszármazott típusaira korlátozódik csak ugyanabban az összeszerelésben. Ez a
privateésprotectedkombinációja.
// Példa a hozzáférési módosítók használatára
public class MyClass
{
public int PublicField; // Bárhonnan elérhető
private int PrivateField; // Csak a MyClass belsejéből elérhető
protected int ProtectedField; // A MyClass és leszármazott osztályokban elérhető
internal int InternalField; // A jelenlegi összeszerelésen belül elérhető
protected internal int ProtectedInternalField; // A jelenlegi összeszerelésen belül vagy leszármazott osztályokban elérhető
private protected int PrivateProtectedField; // A MyClass vagy ugyanabban az összeszerelésben lévő leszármazott osztályokban elérhető
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Hiba - privát mező nem elérhető öröklődésben
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; // Hiba
// mc.ProtectedField = 5; // Hiba
// mc.PrivateProtectedField = 6; // Hiba
}
}