Відповіді:
З: 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 {}
}
}
Є кілька деталей, які відрізняються.
У Java структура каталогів повинна відповідати структурі пакета. У С # такого обмеження немає.
У C # ви можете мати кілька просторів імен в одному файлі. У Java один файл належить одному пакету (див. Попередній).
Java має доступність за замовчуванням / пакетом. Внутрішня доступність C # йде у збірках.
Якщо ви використовуєте VS та Eclipse і дозволяєте їм структурувати проект, тоді ви не сильно відчуєте різницю.
У Java немає такого поняття, як "простір імен" - пакет діє однак, як простір імен у Java, з точки зору надання області для імен. Це також частина моделі доступності.
З розділу 7 Специфікації мови Java :
Програми організовані як набори пакетів. Кожен пакет має власний набір імен для типів, що допомагає запобігти конфліктам імен. Тип верхнього рівня доступний (§6.6) поза пакетом, який оголошує його, лише якщо тип оголошений загальнодоступним.
EDIT: Гаразд, після роз’яснень: пакет Java схожий на простір імен C # - за винятком того, що він впливає на доступність, тоді як у просторах імен C # і доступність повністю ортогональні.
У C ++ / C # простори імен просто використовуються для розділення імен, щоб уникнути зіткнень, випадково використовуючи одне і те ж ім'я для змінної в різних місцях.
У Java пакети - це набагато більше, ніж просто - пакети використовуються для модулів, аспект іменування - це лише частина цього.
У Java ви можете застосовувати різні специфікатори доступу до класів, які матимуть вплив на ваші пакунки.
захищений: доступний для того самого пакета та його підкласів в іншому пакеті, за замовчуванням: доступний для того самого пакета, загальнодоступний: загальнодоступний, приватний: навіть не доступний за тим самим пакетом.
Цей тип специфікаторів доступу не застосовний до простору імен в різкій формі
Простір імен схожий на нову папку, усі підпапки - це простори підменів. Якщо ми розглядаємо простір імен як функцію, як у нас є простір імен, що рекламується під маркетинговим простором імен, тоді ми використовуємо marketing.advertising.adsclass.adsmethod. Дуже легко вирішити проблему. Java має той самий метод через пакет, але складний для нових користувачів.
У C #
'' 'маркетинг простору імен {
class admissions{
int admissions_method(){
}
}
namespace advertising{
class advertisement{
void ad_in_newspaper( int no_of_lines){
}
void ad_on_tv(int seconds){
}
}
}
Для використання в класі клієнта
using marketing;
using marketing.advertising;
'' 'У Java ви використовуєте той самий метод. Ви пакуєте кілька класів в один пакет і використовуєте його багато разів. Це збільшує унікальність. Ви пишете один раз і використовуєте багато разів. Пов’язані класи в одному пакеті. Не потрібно багато разів кодувати.
import system.security.crypography.AsymmetricAlgorithm;. Оскільки в Java вам потрібно імпортувати клас, а не пакет. Можна імпортувати всі класи в пакеті з,import package.*але це також імпортує класи, а не пакет.