2012-02-12 27 views

Trả lời

55

Từ: http://www.javacamp.org/javavscsharp/namespace.html


Java

gói được sử dụng để tổ chức các file hoặc các loại công cộng để 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

package n1.n2; 
    class A {} 

Một tập tin nguồn:

package n1.n2; 
    class B {} 

trọn 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.

C#

Namespaces được sử dụng để tổ chức các chương trình, cả hai như là một hệ thống "nội bộ" tổ chức cho một chương trình, và như 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 các không gian tên, ví dụ:

using myAlias = System.Security.Crypography; 

và sau đó tham khảo các lớp học với

myAlias.AsymmetricAlgorithm 

namespace N1.N2 
{ 
    class A {} 
    class B {} 
} 

hoặc

namespace N1 
{ 
    namespace N2 
    { 
     class A {} 
     class B {} 
    } 
} 
28

Không có thuật ngữ nào như "không gian tên" trong Java - một gói hành vi là không gian tên trong Java mặc dù, về việc 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ừ section 7 of the Java Language Specification:

Các chương trình được tổ chức như bộ gói. Mỗi gói có bộ tên riêng cho các loại, giúp ngăn chặn xung đột tên. Một loại cấp cao nhất có thể truy cập (§6.6) bên ngoài gói khai báo nó chỉ khi loại được công bố công khai.

EDIT: Được rồi, sau khi làm rõ: một gói Java là tương tự đến một # namespace C - ngoại trừ việc nó có ảnh hưởng đến khả năng tiếp cận, trong khi trong C# không gian tên và khả năng tiếp cận hoàn toàn trực giao.

+1

Tôi muốn nói đến không gian tên trong C# tất nhiên! – Mazzy

11

Trong C++/C#, không gian tên chỉ được sử dụng để phân vùng tên để tránh va chạm bằng cách vô tình sử dụng cùng tên cho một biến ở các vị trí khác nhau.

Trong Java, các gói là nhiều hơn thế - các gói được sử dụng cho các mô-đun, khía cạnh đặt tên chỉ là một phần của nó.

36

Có một vài chi tiết khác nhau.

Trong Java cấu trúc thư mục phải khớp với cấu trúc gói. Không 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 trước).

Java có quyền truy cập mặc định/gói. C# khả năng truy cập nội bộ đi trong hội đồng.

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 nhận được sự khác biệt nhiều.

0

Trong java, bạn có thể áp dụng các thông số truy cập khác nhau cho các lớp sẽ ảnh hưởng đến các gói của bạn.

bảo vệ: truy cập đến 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: tiếp cận với cùng một gói, công cộng: có thể truy cập, tin: thậm chí không thể truy cập bằng cùng một gói.

Các loại thông số truy cập này không áp dụng cho không gian tên trong c sharp

Các vấn đề liên quan