Junior
Jaké jsou modifikátory přístupu v C#?
sobes.tech AI
Odpověď od AI
V jazyce C# existují následující modifikátory přístupu:
- public: Přístup není omezen. Členové označení jako
publicjsou přístupní odkudkoli, kde je přístupný jejich obsahující typ. - private: Přístup je omezen na jejich obsahující typ. Členové označení jako
privatejsou přístupní pouze z kódu uvnitř stejné třídy nebo struktury. - protected: Přístup je omezen na obsahující typ nebo odvozené typy od něj. Členové označení jako
protectedjsou přístupní uvnitř své třídy a v odvozených třídách. - internal: Přístup je omezen na aktuální sestavení (.dll nebo .exe). Členové označení jako
internaljsou přístupní odkudkoli uvnitř stejného sestavení. - protected internal: Přístup je omezen na aktuální sestavení nebo odvozené typy od obsahujícího typu v jiných sestaveních. Je to kombinace
protectedainternal. - private protected: Přístup je omezen na obsahující typ nebo odvozené typy od něj pouze ve stejném sestavení. Je to kombinace
privateaprotected.
// Příklad použití modifikátorů přístupu
public class MyClass
{
public int PublicField; // Přístupný odkudkoli
private int PrivateField; // Přístupný pouze uvnitř MyClass
protected int ProtectedField; // Přístupný uvnitř MyClass a v odvozených třídách
internal int InternalField; // Přístupný uvnitř aktuálního sestavení
protected internal int ProtectedInternalField; // Přístupný uvnitř aktuálního sestavení NEBO v odvozených třídách
private protected int PrivateProtectedField; // Přístupný uvnitř MyClass NEBO v odvozených třídách ve stejném sestavení
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Chyba - soukromé pole není přístupné v dědičnosti
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; // Chyba
// mc.ProtectedField = 5; // Chyba
// mc.PrivateProtectedField = 6; // Chyba
}
}