Câu trả lời:
Từ: http://www.javacamp.org/javavscsharp/namespace.html
Các gói được sử dụng để tổ chức các tệp hoặc các kiểu công khai để tránh xung đột kiểu. Các cấu trúc gói có thể được ánh xạ tới một hệ thống tệp.
system.security.cryptography.AsymmetricAlgorithm aa;
có thể được thay thế:
import system.security.Crypography;
class xxx { ...
AsymmetricAlgorithm aa;
Không có bí danh cho các gói. Bạn phải sử dụng câu lệnh nhập hoặc tên đủ điều kiện để đề cập đến loại cụ thể.
package n1.n2;
class A {}
class B {}
hoặc là
package n1.n2;
class A {}
Một tệp nguồn khác:
package n1.n2;
class B {}
Gói không thể được lồng vào nhau. Một tệp nguồn chỉ có thể có một câu lệnh gói.
Không gian tên được sử dụng để tổ chức các chương trình, vừa là một hệ thống tổ chức "nội bộ" cho một chương trình, vừa là một hệ thống tổ chức "bên ngoài".
System.Security.Cryptography.AsymmetricAlgorithm aa;
có thể được thay thế:
using System.Security.Crypography;
AsymmetricAlgorithm aa;
Ngoài ra, người ta có thể chỉ định một bí danh cho không gian tên, ví dụ:
using myAlias = System.Security.Crypography;
và sau đó tham khảo lớp học với
myAlias.AsymmetricAlgorithm
namespace N1.N2
{
class A {}
class B {}
}
hoặc là
namespace N1
{
namespace N2
{
class A {}
class B {}
}
}
Có một vài chi tiết khác nhau.
Trong Java, cấu trúc thư mục phải phù hợp với cấu trúc gói. Không có hạn chế như vậy trong C #.
Trong C #, bạn có thể có nhiều không gian tên trong một tệp. Trong Java một tệp thuộc về một gói (xem phần trước).
Java có khả năng truy cập gói / mặc định. Khả năng truy cập nội bộ của C # đi trong các tập hợp.
Nếu bạn sử dụng VS và Eclipse và để chúng cấu trúc dự án, thì bạn sẽ không cảm thấy sự khác biệt nhiều.
Không có thuật ngữ như "không gian tên" trong Java - một gói hoạt động như một không gian tên trong Java, về mặt cung cấp phạm vi cho tên. Nó cũng là một phần của mô hình trợ năng.
Từ phần 7 của Đặc tả ngôn ngữ Java :
Các chương trình được tổ chức dưới dạng tập hợp các gói. Mỗi gói có bộ tên riêng cho các loại, giúp tránh xung đột tên. Một kiểu cấp cao nhất có thể truy cập được (§6.6) bên ngoài gói chỉ khai báo nó nếu kiểu được khai báo là công khai.
CHỈNH SỬA: Được rồi, sau khi làm rõ: một gói Java tương tự như một không gian tên C # - ngoại trừ việc nó có tác động đến khả năng truy cập, trong khi trong không gian tên C # và khả năng truy cập hoàn toàn trực giao.
Trong java, bạn có thể áp dụng các chỉ định truy cập khác nhau cho các lớp sẽ có tác động đến các gói của bạn.
được bảo vệ: có thể truy cập vào cùng một gói và các lớp con của nó trong một gói khác, mặc định: có thể truy cập vào cùng một gói, công khai: có thể truy cập chung, riêng tư: thậm chí không thể truy cập bằng cùng một gói.
Các loại chỉ định truy cập này không áp dụng cho không gian tên trong c sharp
Không gian tên cũng giống như một thư mục mới, tất cả các thư mục con đều là không gian tên con. Nếu chúng ta coi một vùng tên như một chức năng giống như chúng ta có một quảng cáo vùng tên trong vùng tên tiếp thị thì chúng ta sử dụng marketing.advertising.adsclass.adsmethod. Rất dễ dàng để giải quyết một vấn đề. Java có cùng một phương pháp thông qua gói nhưng phức tạp đối với những người mới đến.
Trong C #
'' tiếp thị không gian tên {
class admissions{
int admissions_method(){
}
}
namespace advertising{
class advertisement{
void ad_in_newspaper( int no_of_lines){
}
void ad_on_tv(int seconds){
}
}
}
Để sử dụng trong lớp khách hàng
using marketing;
using marketing.advertising;
'' 'Trong java, bạn sử dụng cùng một phương pháp. Bạn đóng gói nhiều lớp trong một gói và sử dụng nhiều lần. Nó làm tăng tính độc đáo. Bạn viết một lần và sử dụng nhiều lần. Các lớp liên quan trong một gói. Không cần phải code nhiều lần.
import system.security.crypography.AsymmetricAlgorithm;
. Vì trong java bạn phải nhập một lớp chứ không phải một gói. Có thể nhập tất cả các lớp trong một góiimport package.*
nhưng cũng có thể nhập các lớp, không phải gói.