Junior
137
questionbank
Какие существуют модификаторы доступа в C#?
Ответ от нейросети
sobes.tech 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; // Ошибка - private поле недоступно в наследнике
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; // Ошибка
}
}