Junior
Aké sú modifikátory prístupu v C#?
sobes.tech AI
Odpoveď od AI
V jazyku C# existujú nasledujúce modifikátory prístupu:
- public: Prístup nie je obmedzený. Členovia označení ako
publicsú dostupní z akéhokoľvek miesta, kde je dostupný ich obsahujúci typ. - private: Prístup je obmedzený na ich obsahujúci typ. Členovia označení ako
privatesú dostupní iba z kódu v rámci rovnakej triedy alebo štruktúry. - protected: Prístup je obmedzený na obsahujúci typ alebo typy odvodené od neho. Členovia označení ako
protectedsú dostupní v rámci svojej triedy a v odvodzujúcich triedach. - internal: Prístup je obmedzený na aktuálnu zostavu (.dll alebo .exe). Členovia označení ako
internalsú dostupní z akéhokoľvek miesta v rámci tej istej zostavy. - protected internal: Prístup je obmedzený na aktuálnu zostavu alebo typy odvodené od neho v iných zostavách. Ide o kombináciu
protectedainternal. - private protected: Prístup je obmedzený na obsahujúci typ alebo typy odvodené od neho len v rámci tej istej zostavy. Ide o kombináciu
privateaprotected.
// Príklad použitia modifikátorov prístupu
public class MyClass
{
public int PublicField; // Dostupné z akéhokoľvek miesta
private int PrivateField; // Dostupné iba v rámci MyClass
protected int ProtectedField; // Dostupné v rámci MyClass a v odvodzujúcich triedach
internal int InternalField; // Dostupné v rámci aktuálnej zostavy
protected internal int ProtectedInternalField; // Dostupné v rámci aktuálnej zostavy ALEBO v odvodzujúcich triedach
private protected int PrivateProtectedField; // Dostupné v rámci MyClass ALEBO v odvodzujúcich triedach v tej istej zostave
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Chyba - súkromné pole nie je dostupné v potomkovi
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
}
}