Разница между пространством имен в C# и пакетом в Java



в чем разница (с точки зрения использования) между пространствами имен в C# и пакетами в Java?

573   5  

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

    Ничего не найдено.