2013-08-27 39 views
33

Trong java, bạn có bảo vệ mức gói đảm bảo các lớp chỉ có thể sử dụng trong gói.Công cụ sửa đổi truy cập C# chỉ hiển thị lớp trong không gian tên

Không gian tên trong C# hoạt động nhiều hơn hoặc ít hơn như gói. Nhưng C# không có mức bảo vệ để bảo vệ các lớp trong một không gian tên.

Có lý do cụ thể nào cho điều này không?

+0

C# có các hội đồng và bạn có thể sử dụng từ khóa 'nội bộ'. –

Trả lời

14

Không có công cụ sửa đổi truy cập như vậy: công cụ sửa đổi gần nhất là internal, nhưng đơn vị bảo hộ là lắp ráp trong đó lớp đó cư trú, không phải không gian tên của nó.

Người ta có thể lập luận rằng có thể đạt được mức kiểm soát tương tự bằng cách sử dụng internal, vì cả hai loại hạn chế đều ngăn người ngoài truy cập vào chi tiết triển khai của thư viện của bạn. Người duy nhất mà nó tạo ra sự khác biệt là bạn, người viết thư viện, và bạn có toàn quyền kiểm soát những gì phơi bày và những gì để ẩn đi. Về cơ bản, nó có nghĩa là nếu bạn không muốn sử dụng một lớp bên ngoài không gian tên của nó, đơn giản là không sử dụng nó; nếu lớp học là internal, thì không ai khác có thể sử dụng lớp đó.

+1

Điều này đúng. Nhưng bạn có thể muốn ẩn chi tiết triển khai cho người tiêu dùng của mã xây dựng thư viện. Tôi chủ yếu tự hỏi tại sao sự khác biệt tồn tại. – Jaco

+2

@Jaco Nếu bạn muốn ẩn một lớp học từ những người khác viết mã cho cùng một hội đồng với lớp học của bạn, chúng được coi là đồng nghiệp của bạn. Nếu họ bắt đầu sử dụng các lớp học nội bộ của bạn, bạn có thể đi bộ đến họ và có một cuộc trò chuyện hòa bình tốt đẹp giải thích những nguy hiểm của việc sử dụng một cái gì đó mà không có nghĩa là cho họ được sử dụng :-) – dasblinkenlight

+0

Bạn không thể ẩn bất cứ điều gì vì một được decompiler và thấy tất cả những gì họ cần. Nghiêm túc, không gian tên điều chỉnh không có gì. Nó giống như gấp trong máy tính của bạn. Trình sửa đổi truy cập lớp điều chỉnh mọi thứ. Trên thực tế, nếu bạn có không gian tên không có kiểu công khai trong đó, khi assembly được tham chiếu, bạn thậm chí sẽ không thấy không gian tên đó. –

2

Trong .NET có assemlies (dll hoặc file exe), bạn có thể sử dụng internal sửa đổi để hạn chế truy cập chỉ trong cùng một assembly

1

Có một lý do cụ thể cho việc này?

Chủ yếu, đó là bởi vì có một số chính differences between packages and namespaces

Để đơn giản hóa những gì đã được nói trong câu hỏi liên quan và ở đây: Không gian tên trong C# chủ yếu là để giúp đỡ với việc tổ chức nội dung của một lắp ráp, cả bên trong lẫn bên ngoài. Các gói Java có nhiều điểm chung hơn với các assembly C#, và có một trình sửa đổi truy cập trong C# hạn chế ở cấp assembly: internal.

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