@whistlewars

Для чего нужны спецификаторы доступа в C#/Java и др. подобных языках?

Учу C# и не понимаю какой в этом смысл? Можно везде использовать public и не париться, зачем добавили лишние всякие спецификаторы и как они вообще помогают?
  • Вопрос задан
  • 438 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Модификаторы помогают организовать работу с кодом. Избавить от потенциальных проблем неправильного использования кода, особенно малоопытными программистами. Иногда работаю с PHP, модификаторов типа internal очень сильно не хватает, приходится извращаться, чтобы другим работать с кодом было удобно; чтобы не было возможность залезть туда, куда не нужно и нарушить логику работы; чтобы на поверхности все выглядело проще, чем есть на самом деле.

Чем сложнее проект, чем больше людей работают с кодом, тем сильнее потребность в порядке, изоляции отдельных участков проекта.

В тоже время, если неправильно использовать модификаторы и излишне ограничить доступ, то это может стать проблемой. Нужно хорошенько продумывать архитектуру, чтобы минимизировать возникновение подобных ситуаций.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Djaler
@Djaler
Сеньор-помидор
Чтобы чётко разделять внутреннюю реализацию и внешнее API
Ответ написан
Комментировать
lexxpavlov
@lexxpavlov
Программист, преподаватель
class KvadrUr
{
    public double a, b, c, D, x1, x2;
    public void CalcD()
    {
        D = b*b - 4*a*c;
    }
    public void Calc()
    {
        double d  = Math.Sqrt(D);
        x1 = (-b + d)/(2*a);
        x2 = (-b - d)/(2*a);
    }
}
KvadrUr ur = new KvadrUr();
ur.a = 1;
ur.b = 2;
ur.c = -3;
ur.CalcD();
ur.Calc();
Console.WriteLine(ur.x1 + " " + ur.x2); // правильный ответ
ur.c = -4;
Console.WriteLine(ur.x1 + " " + ur.x2); // неправильный ответ - теперь дискриминант неверный!

Если сделать переменную D приватной (и вызывать CalcD внутри Calc), то это эта ошибка возникнуть не может.
То есть, ограничение доступа к членам класса помогает уменьшать вероятность ошибки.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы