2013-12-26 3 views
2

Для частного класса, должен ли я объявить свою собственность As Public Or Friend (внутренний в C#)? Мой приватный класс недоступен никакими другими классами, кроме его родительского класса.Уровень доступа в частном классе

+0

Что вы подразумеваете под родительским классом? Является ли ваш класс вложенным в класс или что? –

+0

Да - это вложенный класс –

+0

Они все равно будут частными (потому что класс объявлен частным, и это заменит все остальное). Поэтому вы можете забыть об этом в этом случае. –

ответ

2

В общем, попробуйте сохранить целостность инкапсуляции. Отношения между вашими классами должны быть основаны на «необходимости знать».

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

  • ли родительский класс единственный класс, который должен знать подкласс ? если да, то это должно быть private.

  • Если нет, все остальные объекты, которые должны знать о подклассе, находятся в одном проекте? если да, то это должно быть internal.

  • Если существуют сущности, внешние по отношению к проекту, которые должны знать о подклассе, это должно быть public.

Что касается недвижимости. Если вы решили использовать подкласс private, при создании свойств public использовать не нужно.
Единственным объектом, который может иметь экземпляр класса, является родительский класс, который находится в одном проекте, поэтому для свойств должно быть достаточно internal.

Примечание
C# не имеет модификатор friend. Вместо этого вы можете использовать internal или The-наиболее похожи-но-менее элегантный вариант: InternalsVisibleTo

+0

C# internal == VB Friend. – dovid

+0

@lomed это неправда. 'friend' указывает, что этот класс доступен только *** ONE ***, определенному классу. 'internal' указывает, что этот класс доступен классу *** ANY *** в сборке. –

+1

http://msdn.microsoft.com/en-us/library/08w05ey2.aspx – dovid

1

С вами класса (гнездовой один) является private только один, кто может получить доступ к нему является его контейнер (базовый или родительский класс). В этом случае public или internal (Friend в VB) не имеет никакого значения, поскольку единственный, кто имеет доступ к вложенному классу, является его родительским. В общем, если в какой-то день вы захотите изменить модификатор доступа на public, тогда хорошо его предвидеть и выбрать между internal и public. Его простой, если вы хотите, чтобы члены вашего вложенного класса отображались только внутри сборки, где он был определен, затем используйте internal, иначе рассмотрите использование public.