В чем разница (с точки зрения использования) между пространствами имен в C # и пакетами в Java?
98
От: http://www.javacamp.org/javavscsharp/namespace.html
Пакеты используются для организации файлов или общедоступных типов, чтобы избежать конфликтов типов. Конструкции пакетов могут быть сопоставлены с файловой системой.
system.security.cryptography.AsymmetricAlgorithm aa;
можно заменить:
import system.security.Crypography;
class xxx { ...
AsymmetricAlgorithm aa;
Для пакетов нет псевдонима. Вы должны использовать оператор импорта или полное имя, чтобы указать конкретный тип.
package n1.n2;
class A {}
class B {}
или
package n1.n2;
class A {}
Другой исходный файл:
package n1.n2;
class B {}
Пакет не может быть вложенным. Один исходный файл может иметь только один оператор пакета.
Пространства имен используются для организации программ и как «внутренняя» организационная система программы, и как «внешняя» организационная система.
System.Security.Cryptography.AsymmetricAlgorithm aa;
можно заменить:
using System.Security.Crypography;
AsymmetricAlgorithm aa;
В качестве альтернативы можно указать псевдоним для пространства имен, например
using myAlias = System.Security.Crypography;
а затем обратитесь к классу с помощью
myAlias.AsymmetricAlgorithm
namespace N1.N2
{
class A {}
class B {}
}
или
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
import system.security.crypography.AsymmetricAlgorithm;
. Поскольку в java вам нужно импортировать класс, а не пакет. Можно импортировать все классы в пакете сimport package.*
но, который тоже импортирует классы, а не пакет.namespace
Ключевое слово в Java было бы хорошо.Есть несколько деталей, которые отличаются.
В Java структура каталогов должна соответствовать структуре пакета. В C # такого ограничения нет.
В C # вы можете иметь несколько пространств имен в одном файле. В Java один файл принадлежит одному пакету (см. Предыдущий).
Java имеет доступность по умолчанию / пакет. Внутренняя доступность C # осуществляется в сборках.
Если вы используете VS и Eclipse и позволяете им структурировать проект, вы не почувствуете особой разницы.
источник
В Java нет такого термина, как «пространство имен» - пакет действует как пространство имен в Java с точки зрения предоставления области для имен. Это также часть модели доступности.
Из раздела 7 спецификации языка Java :
РЕДАКТИРОВАТЬ: Хорошо, после уточнения: пакет Java похож на пространство имен C #, за исключением того, что он влияет на доступность, тогда как в C # пространства имен и доступность полностью ортогональны.
источник
В C ++ / C # пространства имен используются только для разделения имен, чтобы избежать коллизий из-за случайного использования одного и того же имени для переменной в разных местах.
В Java пакеты - это гораздо больше, чем просто это - пакеты используются для модулей, а аспект именования - лишь часть этого.
источник
В java вы можете применять различные спецификаторы доступа к классам, которые будут влиять на ваши пакеты.
protected: доступен для того же пакета и его подклассов в другом пакете, по умолчанию: доступен для того же пакета, public: доступен для всех, private: недоступен даже для одного пакета.
Этот тип спецификаторов доступа не применим к пространству имен в c-Sharp.
источник
Пространство имен похоже на новую папку, все подпапки являются подпространствами имен. Если мы рассматриваем пространство имен как функцию, например, у нас есть реклама пространства имен в пространстве имен marketing, тогда мы используем marketing.advertising.adsclass.adsmethod. Решить проблему очень просто. В Java есть тот же метод через пакет, но он сложен для новичков.
В C #
'' 'namespace marketing {
}
Для использования в клиентском классе
'' 'В java вы используете тот же метод. Вы упаковываете несколько классов в один пакет и используете его много раз. Это увеличивает уникальность. Вы пишете один раз и используете много раз. Связанные классы в одном пакете. Не нужно кодировать много раз.
источник