2009-07-20 26 views
5

Nếu tôi có một không gian tên như:Namespaces và sử dụng Directive

namespace MyApp.Providers 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Configuration; 
    using System.Globalization; 
    } 

Điều này có nghĩa rằng nếu tôi có thể tạo các file khác và các lớp học với không gian tên tương tự, những điều khoản sử dụng được chia sẻ, và tôi không cần phải bao gồm chúng một lần nữa?

Nếu có, đây có phải là một chút đau đầu về quản lý không?

+1

Thông tin chi tiết tại đây: http://stackoverflow.com/questions/125319/should-usings-be-inside-or-outside-the-namespace – alexandrul

+1

Đó là một chỉ thị chứ không phải là tuyên bố. Câu lệnh ['using'] (http://msdn.microsoft.com/en-us/library/yh598w02.aspx) là một thứ hoàn toàn khác. –

Trả lời

10

Không, nó chỉ tốt cho phần không gian tên bên trong tệp. Không phải cho tất cả các tệp bên trong không gian tên.

Nếu bạn đặt câu lệnh sử dụng bên ngoài vùng tên, thì nó áp dụng cho toàn bộ tệp bất kể không gian tên.

Nó cũng sẽ tìm kiếm các Sử dụng bên trong vùng tên trước tiên, trước khi đi đến phạm vi bên ngoài.

+0

Tốt! Điều này có ý nghĩa sau đó. Rất vui khi biết ... –

+1

Bạn đặt câu lệnh sử dụng bên ngoài tệp như thế nào? –

+0

Xin lỗi, lỗi đánh máy. Có nghĩa là để nói bên ngoài không gian tên. – Brandon

0

Không, không, và không, không phải vậy.

Hãy xem xét thực tế rằng bên ngoài tuyên bố namespace, bạn đang ở trong không gian tên chung. Các câu lệnh using trong vùng đó của tệp nguồn có ảnh hưởng đến không gian tên chung trong các tệp nguồn khác không?

0

No. Bạn sẽ cần phải bao gồm các không gian tên trong mỗi lớp ngoại trừ một phần các lớp.

Lưu ý một mặt: bạn đang thực hành rất tốt trong việc đưa các câu lệnh sử dụng vào trong Không gian tên. Đó là cú pháp rất tốt.

Tiếp tục công việc tốt.

+2

Tại sao việc đặt câu lệnh Sử dụng trong khai báo không gian tên là tốt? –

+4

Tò mò về lý do tại sao bạn cho rằng thực hành tốt * rất * của nó để làm điều đó? Nếu bạn thực hiện theo các thực hành tốt của việc đặt mỗi lớp trong một tệp riêng biệt, nó tạo ra sự khác biệt nhỏ cho dù bạn đặt các câu lệnh 'using' ở đầu tệp hoặc trên cùng của một khối' không gian tên'. –

+0

Earwicker - THANK YOU VERY MUCH !!! đây là lý do tại sao tôi đã nhầm lẫn ngay từ đầu! –

0

Báo cáo sử dụng hợp lệ đối với tệp mã mà chúng xuất hiện, với một chút vặn nhỏ; nếu bạn đặt các câu lệnh sử dụng bên trong không gian tên, chúng được giới hạn trong phạm vi của không gian tên đó, nhưng vẫn chỉ trong cùng một tệp mã.

2

Bạn cần chỉ định hướng dẫn sử dụng cho bất kỳ lớp nào mà bạn muốn tham chiếu mà không đủ điều kiện trong từng tệp mà bạn muốn sử dụng chúng.

Reference:

Phạm vi của một chỉ thị sử dụng là giới hạn đối với các tập tin trong đó nó xuất hiện.

0

Chỉ áp dụng cho tệp hiện tại.Cho dù họ đang ở trong hay ngoài việc kê khai không gian tên làm cho chỉ một sự khác biệt nhỏ:

Trình tự tra cứu với nhiều loại như sau:

  1. bắt đầu trong việc khai báo không gian tên trong cùng
  2. nhìn trong không gian tên hiện tại
  3. nhìn trong usings của namespace hiện
  4. đi đến việc kê khai gian tên cha mẹ và lặp lại từ bước 2
0.123.

Do vậy, chương trình này sẽ biên dịch tốt:

namespace MyProject.Main { 
    using System; 

    class Program { 
     public static void Main(string[] args) { 
      Console.WriteLine("Hello, World!"); 
     } 
    } 
} 

// in another file: 
namespace MyProject.Console { 
    class Test {} 
} 

Nhưng nếu bạn di chuyển using System; để phía trên, sau đó biên soạn sẽ thất bại (MyProject.Console.WriteLine không tồn tại).

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