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

c# java oop access-modifiers

9016 просмотра

4 ответа

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

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

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

Автор: Brian Sweeney Источник Размещён: 29.07.2019 03:52

Ответы (4)


6 плюса

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

Автор: Gren Размещён: 18.08.2009 07:34

6 плюса

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

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

Этот список имеет две ошибки:

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

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

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

Автор: Powerlord Размещён: 19.08.2009 01:37

1 плюс

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

Автор: Thomas Owens Размещён: 18.08.2009 07:32

0 плюса

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

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

Автор: Denis Biondic Размещён: 18.08.2009 08:15
Вопросы из категории :
32x32