Лучшие практики модификаторов доступа в C # против Java
9016 просмотра
4 ответа
Я понимаю, что эмпирическое правило в OOD состоит в том, чтобы минимизировать доступ ко всем членам данного объекта настолько хорошо, насколько это возможно.
C # и Java, кажется, реализуют один и тот же набор модификаторов доступа; однако, кое-что, что сбило меня с толку в течение некоторого времени, - то, почему классы Java, кажется, главным образом объявлены как публичные, в то время как классы C #, кажется, в основном, объявлены по умолчанию. Есть ли какая-то тонкость в этих языках, которая навязывает эти различия, или это просто вопрос соглашения или что?
Я часто просматриваю свой код на C # (я обычно делаю большинство классов общедоступными, за исключением внутренних классов, анонимных классов и других классов с узкой областью применения и полезностью), пытаясь угодить компилятору, однако мне интересно, могу ли я что-то упустить важный.
Автор: Brian Sweeney Источник Размещён: 29.07.2019 03:52Ответы (4)
6 плюса
Я думаю, что вы ответили на свой вопрос. Согласно Джошуа Блоху, «Эмпирическое правило простое, сделайте каждый класс или член как можно более недоступным». Эффективная Java
Автор: Gren Размещён: 18.08.2009 07:346 плюса
Область видимости Java немного отличается от области видимости C # .
Об этом вкратце говорится в C # с точки зрения разработчика Java « То же самое, но по-другому: модификаторы доступа» . Этот документ немного устарел, но все еще актуален.
Этот список имеет две ошибки:
- C #
internal
эквивалентен области действия Java по умолчанию (которая является его собственной областью действия). - C #
internal protected
эквивалентен Javaprotected
.
Кроме того, в приведенном выше документе не упоминаются модификаторы доступа по умолчанию для классов, только для методов и свойств / переменных.
Для справки, область по умолчанию для классов в c # является внутренней. Java является его обычной областью по умолчанию, как описано ранее.
Автор: Powerlord Размещён: 19.08.2009 01:371 плюс
Единственные вещи, которые я публикую, - это статические / конечные переменные, которые обычно являются константами. Все остальное является приватным, и доступ осуществляется через методы getXXX () и setXXX (), когда это необходимо. Методы setXXX () также выполняют любую проверку данных. Если я должен сделать что-то защищенное, я сделаю это, но я обычно избегаю этого.
Автор: Thomas Owens Размещён: 18.08.2009 07:320 плюса
Меньше «клиент» (другой код) знает о внутренней работе ваших классов, он выиграет больше ... Простое правило абстракции и фундаментальная основа ООП. Правильный ответ уже дан выше:
«Эмпирическое правило простое, сделайте каждый класс или член как можно более недоступным». ~ Джошуа Блох
Автор: Denis Biondic Размещён: 18.08.2009 08:15Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- oop Передать по ссылке или передать по значению?
- oop Что такое инверсия контроля?
- oop Когда вы должны использовать «друг» в C ++?
- oop Предпочитаете композицию наследству?
- oop Когда вы должны использовать класс против структуры в C ++?
- access-modifiers В чем разница между общедоступным, защищенным, частным и частным в Java?
- access-modifiers Почему я не могу иметь защищенных членов интерфейса?
- access-modifiers Почему я не могу получить доступ к членам, защищенным в C #, кроме как так?
- access-modifiers В чем разница между «защищенным» и «защищенным внутренним»?
- access-modifiers В C #, в чем разница между публичным, приватным, защищенным и не имеющим модификатора доступа?