2017-01-15 3 views
0

Я уже прочитал документацию о новых модификаторах «open» и «fileprivate». Но есть две вещи, которые я не понимаю:Использование «открытых» и «общедоступных»

  1. Почему невозможно объявить протоколы или расширения также как «открытые»? И означает ли это, что невозможно использовать эти вещи вне модуля?
  2. Если я не хочу создавать свои классы для модуля, но для обычного приложения, должен ли я объявлять свои классы и методы как «открытые» в любом случае или это хорошая практика, чтобы они были только «общедоступными»?

ответ

0

Как this answer говорит:

  • Открытый класс доступен и подклассы вне определяющего модуля. Открытый член класса доступен и переопределяется вне определяющего модуля.
  • Открытый класс доступен, но не подклассы за пределами определяющего модуля. Открытый член класса доступен, но не переопределяется вне определяющего модуля.

Я думаю, что ответ на ваш первый вопрос заключается в том, что вы не можете переопределить или подклассифицировать протокол или расширение. Таким образом, нет смысла использовать такие вещи как open, потому что public уже делает их доступными вне модуля.

Для вашего второго вопроса я бы сказал, что вы должны объявлять свои собственные классы как open, если вы планируете переопределять или подклассифицировать. В противном случае вы разрешаете ненужный доступ к этим элементам. В большинстве случаев public должен соответствовать вашим потребностям.

Edit:

Как @Alex указывает, я не думаю, что есть много минусов позволяя это «дополнительный доступ». Единственное, о чем я могу думать, это то, что вы просто хотели защитить свои классы от своего будущего, но это может быть или не быть применимым. Таким образом, если это не так, не должно быть большого вреда при настройке по умолчанию open.

+0

Я бы ошибался на стороне предпочтения 'open'. Вы не можете действительно просмотреть случаи, когда другие захотят подклассифицировать ваши классы. Если нет никаких оснований против этого, нет причин не допускать его по умолчанию. – Alexander

+0

Конечно, могут быть внутренние действия ваших классов, которые вы хотели бы быть доступными для публики, но не хотели бы переезжать (например, если поведение этих методов имеет решающее значение для функционирования класса). Пока не возникнет такая ситуация, «открыть» - это путь :) – Alexander

+0

@ Александр Да, это в значительной степени, почему я положил его как 'public'>' open' в первую очередь, но вы правы, что большая часть время не нужно –

Смежные вопросы