Подтвердить что ты не робот

Модификатор доступа С# для отображения класса только в пространстве имен

В java у вас есть защита уровня пакета, которая гарантирует, что классы доступны только в пакете.

Пространства имен в С# действуют более или менее как пакеты. Но С# не имеет уровня защиты для защиты классов в пространстве имен.

Есть ли конкретная причина для этого?

4b9b3361

Ответ 1

Нет такого модификатора доступа: ближайший модификатор internal, но единица защиты - это сборка, в которой находится класс, а не его пространство имен.

Можно утверждать, что с помощью internal можно достичь аналогичного уровня управления, поскольку оба вида ограничений позволяют аутсайдерам получить доступ к деталям реализации вашей библиотеки. Единственный человек, для которого это имеет значение, - это вы, писатель библиотеки, и вы полностью контролируете, что показывать и что скрывать в любом случае. По сути, это означает, что если вы не хотите использовать класс вне своего пространства имен, просто воздержитесь от его использования; если класс internal, никто другой не сможет использовать этот класс.

Ответ 2

В .NET есть assemlies (dll или exe файлы), вы можете использовать модификатор internal для ограничения доступа только в пределах одной сборки

Ответ 3

Есть ли конкретная причина для этого?

В основном, это потому, что есть некоторые ключевые различия между пакетами и пространствами имен

Чтобы упростить то, что уже было сказано в связанном вопросе, и здесь: Пространства имен в С# в основном помогают организовать содержимое сборки, как внутри, так и снаружи. Пакеты Java имеют больше общего с сборками С#, и в С# существует модификатор доступа, который ограничивает уровень сборки: internal.