Лучшая практика модификатора доступа в C# по сравнению с Java

Я понимаю, что эмпирическое правило в OOD состоит в том, чтобы минимизировать доступ ко всем членам данного объекта настолько лучше всего, как может быть обоснованно выполнен.

C# и Java оба, кажется, реализуют тот же набор модификаторов доступа; однако, что-то, что имеет изумленный меня в течение некоторого времени теперь, - то, почему классы Java, кажется, главным образом объявляются столь же общедоступные, в то время как классы C#, кажется, главным образом объявляются как значение по умолчанию. Там некоторая тонкость на эти языки, который налагает эти различия, или это - просто вопрос конвенции или что?

Я прохожу часто свой код C# (я обычно обнародовал большинство классов, за исключением внутренних классов, анонимных классов и других классов узкого объема и полноценности) в попытке понравиться компилятору, однако интересно, могу ли я пропускать что-то важное.

7
задан yoozer8 15 August 2012 в 15:08
поделиться

4 ответа

Думаю, вы ответили на свой вопрос. По словам Джошуа Блоха, «практическое правило простое: сделайте каждый класс или член как можно более недоступным». Эффективная Java

6
ответ дан 6 December 2019 в 19:40
поделиться

Область видимости Java немного отличается от области видимости C # .

Об этом кратко говорится в C # С точки зрения разработчика Java То же самое, но другое: Модификаторы доступа . Этот документ немного устарел, но по-прежнему актуален.

В этом списке есть две ошибки:

  1. C # internal эквивалентен области видимости Java по умолчанию (которая является ее собственной областью).
  2. C # ' s internal protected эквивалентно Java protected .

Кроме того, в приведенном выше документе не упоминаются модификаторы доступа по умолчанию для классов, только для методов и свойств / переменных.

Для справки: область видимости по умолчанию для классов в C # является внутренней. Java - это обычная область действия по умолчанию, как описано ранее.

6
ответ дан 6 December 2019 в 19:40
поделиться

Единственное, что я делаю общедоступным, - это статические / конечные переменные, которые обычно являются константами. Все остальное является частным, и доступ осуществляется через методы getXXX () и setXXX (), когда это необходимо. Методы setXXX () также выполняют любую проверку данных. Если мне нужно сделать что-то защищенным, я это сделаю, но обычно я этого избегаю.

1
ответ дан 6 December 2019 в 19:40
поделиться

Меньше «клиент» (другой код) знает о внутреннем работы ваших классов, он принесет больше пользы ... Простое правило абстракции и фундаментальный столп ООП. Правильный ответ уже дан выше:

«Практическое правило простое: сделайте каждый класс или член как можно более недоступным». ~ Джошуа Блох

0
ответ дан 6 December 2019 в 19:40
поделиться