От кого мы защищаем наши занятия? - PullRequest
6 голосов
/ 12 февраля 2012

В настоящее время я изучаю C # и мне было интересно, какой смысл объявлять классы / методы закрытыми?Кого мы скрываем / ограничиваем доступ к этим классам.

Потому что, если кто-то редактирует источник, он может просто поменять тег с приватного на публичный.Я не уверен, как пользователь сможет получить доступ к этим методам и какие проблемы это вызовет.

tldr;Какой смысл в модификаторах доступа.

Спасибо!

Ответы [ 6 ]

7 голосов
/ 12 февраля 2012

Видимость члена, как часто называют эту функцию, не является функцией безопасности. Это удобство для программиста, разработанное, чтобы помочь ограничить межклассовые зависимости. Объявив члена закрытым, вы не позволяете другому коду обращаться к нему напрямую. Это имеет два преимущества:

  • если вы обнаружите, что с переменной-членом манипулируют так, как вы не предполагали, объем кода, который вы должны проверить, значительно меньше, когда переменная является закрытой
  • вы можете изменить внутреннюю работу класса (все, что объявлено закрытым), не нарушая интерфейс (все, что объявлено общедоступным)

Видимость членов, вероятно, самая важная языковая особенность в реализации инкапсуляции , одного из основных принципов объектно-ориентированного программирования.

1 голос
/ 12 февраля 2012

Содержит ваш код в чистоте. Вы разделяете свой код на общедоступный интерфейс и закрытые внутренние компоненты.

Таким образом, вы можете менять свои внутренние компоненты, не опасаясь взломать код, который зависит от вашего класса. Вы также можете смело предположить, что никакой другой код не изменил ваше внутреннее состояние, пока вы не искали.

1 голос
/ 12 февраля 2012

Это базовая концепция ОО - инкапсуляция и в основном не имеет отношения к безопасности как таковой. Цитата из Википедии (выделено мое):

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

0 голосов
/ 12 февраля 2012

Модификаторы доступа используются для инкапсуляции , так что внутренние объекты объекта / класса скрыты от внешних пользователей или классов. Это предотвращает случайное или умышленное нарушение пользователями объекта / класса путем изменения его переменных и / или функций.

Инкапсуляция является важной частью Открытого / закрытого принципа , который относится к классу, который «открыт для расширения», но «закрыт для модификации». Этот принцип позволяет расширять классы, не опасаясь, что API класса может измениться в будущем.

0 голосов
/ 12 февраля 2012

Вы можете написать код двумя способами: для расширения и для использования как есть.

Вы можете иметь или не иметь доступ к исходному коду.

Модификаторы доступа наиболее важны в коде, предназначенном для расширения, когда клиентский программист (программист, который расширяет и использует ваш код) должен иметь доступ только к предоставляемому вами API - в основном, к интерфейсу, который вы предлагаете с помощью этих модификаторов доступа ,

0 голосов
/ 12 февраля 2012

Модификаторы доступа используются для инкапсуляции: они позволяют организовать ваш код в пакетах и ​​классах, и иметь только "официальную" общедоступную интерфейс виден снаружи, скрывая реализацию детали (что вы хотите сделать, так что вы можете позже изменить его без кому угодно).

Это особенно (только?) Важно, когда вы выпускаете код как библиотека для использования другими программистами. Даже если код используется только в ваша собственная программа, она помогает структурировать большие программы на несколько пакеты. - Тило

...