2012-09-28 23 views
11

Tôi đã cố gắng lấy một số mã cũ được tạo kiểu đúng cách với bút stylecop. Nó yêu cầu đặt các câu lệnh sử dụng bên trong. Nó hoạt động tốt cho tất cả nhưng chỉ một. Tôi đã giảm vấn đề xuống mã dưới đây.Việc sử dụng câu lệnh bên trong không gian tên bị lỗi

namespace B.C 
{ 
    using System; 

    public class Hidden 
    { 
     public void SayHello() 
     { 
      Console.WriteLine("Hello"); 
     } 
    } 
} 

namespace A.B.C 
{ 
    using B.C; 

    public class Program 
    { 
     static void Main(string[] args) 
     { 
      new Hidden().SayHello(); 
     } 
    } 
} 

này cho phép biên soạn lỗi Lỗi

"Loại hoặc namespace tên 'Ẩn' không thể được tìm thấy (là bạn thiếu một chỉ thị sử dụng hoặc tham khảo một hội?)".

Nếu tôi di chuyển bằng B.C; phía trên không gian tên A.B.C sau đó nó xây dựng đúng cách. Lớp Hidden được phát triển bởi nhóm khác và chúng tôi không thể sửa đổi nó.

+2

Có thể không gian tên 'B.C' được đánh giá không chính xác thành' A.B.C' khi trong không gian tên 'A.B.C' phạm vi? Khi ở phạm vi toàn cục, nó không biết về bất kỳ không gian tên nào, vì vậy hãy tìm 'B' trước tiên không giả định rằng' B' trong 'A' (' A.B'). –

Trả lời

15

Khi bạn đang ở trong không gian tên A, thì B.C thực sự sẽ là A.B.C.

Sử dụng global:: để xác định rằng bạn đang tìm kiếm từ gốc:

using global::B.C; 
+0

+1 hoàn hảo ..... – Habib

+0

+1 Giải thích tốt –

+2

Cũng đáng chú ý là công trình này ở khắp mọi nơi để thoát khỏi địa ngục không gian tên, không chỉ trong một tuyên bố sử dụng. (ví dụ: 'new global :: MyNS.BlahBlah()') –

2

TC là mâu thuẫn với A.B.C. Bạn cần đổi tên B.C thành một cái gì đó khác hoặc chỉ định nó bằng global

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