Для частного класса, должен ли я объявить свою собственность As Public Or Friend (внутренний в C#)? Мой приватный класс недоступен никакими другими классами, кроме его родительского класса.Уровень доступа в частном классе
ответ
В общем, попробуйте сохранить целостность инкапсуляции. Отношения между вашими классами должны быть основаны на «необходимости знать».
Поскольку я не знаком с вашим дизайном приложения, я уверен, что я упрощаю, но я хотел бы задать себе следующий вопрос:
ли родительский класс единственный класс, который должен знать подкласс ? если да, то это должно быть
private
.Если нет, все остальные объекты, которые должны знать о подклассе, находятся в одном проекте? если да, то это должно быть
internal
.Если существуют сущности, внешние по отношению к проекту, которые должны знать о подклассе, это должно быть
public
.
Что касается недвижимости. Если вы решили использовать подкласс private
, при создании свойств public
использовать не нужно.
Единственным объектом, который может иметь экземпляр класса, является родительский класс, который находится в одном проекте, поэтому для свойств должно быть достаточно internal
.
Примечание
C# не имеет модификатор friend
. Вместо этого вы можете использовать internal
или The-наиболее похожи-но-менее элегантный вариант: InternalsVisibleTo
С вами класса (гнездовой один) является private
только один, кто может получить доступ к нему является его контейнер (базовый или родительский класс). В этом случае public
или internal
(Friend
в VB) не имеет никакого значения, поскольку единственный, кто имеет доступ к вложенному классу, является его родительским. В общем, если в какой-то день вы захотите изменить модификатор доступа на public
, тогда хорошо его предвидеть и выбрать между internal
и public
. Его простой, если вы хотите, чтобы члены вашего вложенного класса отображались только внутри сборки, где он был определен, затем используйте internal
, иначе рассмотрите использование public
.
Что вы подразумеваете под родительским классом? Является ли ваш класс вложенным в класс или что? –
Да - это вложенный класс –
Они все равно будут частными (потому что класс объявлен частным, и это заменит все остальное). Поэтому вы можете забыть об этом в этом случае. –