5 ответов:
от:http://www.javacamp.org/javavscsharp/namespace.html
Java
пакеты используются для организации файлов или открытых типов, чтобы избежать конфликтов типов. Конструкции пакетов могут быть сопоставлены с файловой системой.
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 {}пакет не может быть вложенным. Один исходный файл может иметь только один оператор пакета.
C#
пространства имен используются для организации программ, как в качестве "внутренней" организационной системы для программы, так и в качестве" внешней " организационной системы.
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 {} } }
есть несколько деталей, которые отличаются.
в Java структура каталогов должна соответствовать структуре пакета. Нет такое ограничение в C#.
В C# вы можете иметь несколько пространств имен в одном файле. В Java одним файлом принадлежит к одному пакету (см. предыдущий).
Java имеет доступность по умолчанию / пакета. C# внутренняя доступность идет в сборке.
Если вы используете VS и Eclipse и позволяете им структурировать проект, то вы не будете чувствовать отличий много.
в Java - пакете нет такого термина, как "пространство имен"действия как пространство имен в Java, хотя, с точки зрения предоставления области для имен. Это также часть модели доступности.
с раздел 7 спецификации языка Java:
программы организованы в виде наборов пакетов. Каждый пакет имеет свой собственный набор имен для типов, что помогает предотвратить конфликты имен. Тип верхнего уровня доступен (§6.6) за пределами пакет, который объявляет его только в том случае, если тип объявлен общедоступным.
EDIT: хорошо, после уточнения: пакет Java-это как к пространству имен C# - за исключением того, что оно влияет на доступность, тогда как в пространствах имен C# и доступность полностью ортогональны.
в C++/C# пространства имен используются только для разбиения имен, чтобы избежать коллизий, случайно используя одно и то же имя для переменной в разных местах.
в Java пакеты гораздо больше, чем просто это-пакеты используются для модулей, аспект именования является лишь частью этого.
в Java, вы можете применять различные спецификаторы доступа к классам, которые будут иметь влияние на ваши пакеты.
защищено: доступно для одного пакета и его подклассов в другом пакете, по умолчанию: доступно для того же пакета, общественность: общедоступна, частный : даже не доступны в том же пакете.
эти типы спецификаторов доступа не применимы к пространству имен в C sharp
Comments