Junior
Кои са модификаторите за достъп в C#?
sobes.tech AI
Отговор от AI
В C# съществуват следните модификатори за достъп:
- public: Достъпът не е ограничен. Членовете, маркирани като
public, са достъпни от всякъде, където е достъпен техният съдържащ тип. - private: Достъпът е ограничен до техния съдържащ тип. Членовете, маркирани като
private, са достъпни само от кода вътре в същия клас или структура. - protected: Достъпът е ограничен до съдържащия тип или до типове, наследяващи от него. Членовете, маркирани като
protected, са достъпни вътре в своя клас и в наследяващите класове. - internal: Достъпът е ограничен до текущата сборка (.dll или .exe). Членовете, маркирани като
internal, са достъпни от всякъде в същата сборка. - protected internal: Достъпът е ограничен до текущата сборка или до типове, наследяващи от съдържащия тип в други сборки. Това е комбинация от
protectedиinternal. - private protected: Достъпът е ограничен до съдържащия тип или до типове, наследяващи от него само в същата сборка. Това е комбинация от
privateиprotected.
// Пример за използване на модификатори за достъп
public class MyClass
{
public int PublicField; // Достъпен от всякъде
private int PrivateField; // Достъпен само вътре в MyClass
protected int ProtectedField; // Достъпен вътре в MyClass и в наследяващите класове
internal int InternalField; // Достъпен вътре в текущата сборка
protected internal int ProtectedInternalField; // Достъпен вътре в текущата сборка ИЛИ в наследяващите класове
private protected int PrivateProtectedField; // Достъпен вътре в MyClass ИЛИ в наследяващите класове в същата сборка
void MyMethod()
{
PrivateField = 10; // OK
}
}
public class DerivedClass : MyClass
{
void DerivedMethod()
{
ProtectedField = 20; // OK
// PrivateField = 30; // Грешка - частно поле не е достъпно в наследяване
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; // Грешка
// mc.ProtectedField = 5; // Грешка
// mc.PrivateProtectedField = 6; // Грешка
}
}