2009-10-10 24 views
8

Từ những gì tôi hiểu, bộ định tính global:: cho phép bạn truy cập vào một không gian tên đã bị ẩn bởi một tên khác có cùng tên. Ví dụ: MSDN page sử dụng System làm ví dụ. Nếu bạn tạo không gian tên riêng của mình System, bạn có thể truy cập thư gốc với global::System. Điều đầu tiên xuất hiện trong đầu là, tại sao mọi người lại gọi tên miền của họ là System ?? Trang tiếp tục nói điều này rõ ràng là không nên, nhưng sao chép không gian tên là rất có thể trong các dự án lớn. Nếu/khi điều này xảy ra, có phải đó là dấu hiệu cho thấy mọi thứ đang đi sai hướng hoặc có lý do hợp lệ để có xung đột không gian tên không?Việc sử dụng toàn cục :: cho các không gian tên xung đột

+0

Có mùi mã tốt không? : p –

+0

@rpflo: Có lẽ anh ta có nghĩa là "đây có phải là mùi mã nghiêm trọng không?" –

+1

Ngược lại với mã tốt, có mùi như hoa tử đinh hương. :) –

Trả lời

7

Một lý do chính đáng cho việc xung đột không gian tên có thể là sử dụng thư viện nội bộ được viết cho các phiên bản trước đó của .Net không chứa chức năng được thêm vào trong các phiên bản sau. Trong ví dụ .Net 1.1 ngày, tôi đã viết một lớp Registry bao bọc các cuộc gọi đăng ký API. Cơ hội thuần túy, tên của phương thức mà tôi chọn giống hệt với tên của lớp Registry .Net, và chúng cũng giống hệt như vậy, vì vậy rất dễ rút mã nguồn của tôi. Đối với các công cụ phức tạp hơn, có thể sử dụng đoạn mã cũ hơn, có tên kém với bộ định tính global:: có thể hữu ích.

Cố ý đặt tên cho một đoạn mã mới bằng cách sử dụng không gian tên .Net hiện tại chắc chắn sẽ là một mã nguồn.

12

Nói chung, global:: được sử dụng để cho biết "Tôi muốn bắt đầu ở đầu cấu trúc không gian tên". Nếu tôi có một không gian tên gọi là MyProduct.System thì mọi thứ nằm trong không gian tên MyProduct sẽ không thể truy cập vào không gian tên Microsoft System. Đó là một mùi mã? Có thể đôi khi, nhưng không phải là đặc biệt là có mùi.

7

Bất kỳ mã nào do máy tạo ra đều nên thử và sử dụng global:: để giảm thiểu khả năng xung đột không gian tên mà nó có thể không biết. Hơn nữa, bất kỳ mã nào của bạn có thể chạy vào xung đột đều có thể sử dụng nó để cụ thể hơn.

0

Tôi nghĩ thỉnh thoảng điều này xảy ra khi một trong các không gian tên của bạn có tên khác. Ví dụ, tôi có một không gian tên .Persistence.NHibernate, nơi NHibernate cũng có thể là không gian tên gốc của hội đồng NHibernate.

Tôi không thấy bất kỳ mã mùi ở đây, nó chỉ đặt tên isses;)

2

Microsoft có một số hướng dẫn namespace tốt trong cuốn sách tuyệt vời Framework Design Guidelines 2nd Ed.. Nói chung, họ khuyên bạn nên chống lại việc giới thiệu comflicts (ví dụ, bằng cách đặt tên cho loại Stream của bạn).

Tôi không tin rằng tôi đã từng sử dụng trình độ chuẩn :: toàn cầu. Tôi thường sẽ xem xét nó một mùi mã (mặc dù có những ngoại lệ, như MusiGenesis và sixlettervariables chỉ ra).

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