2013-04-08 31 views
6

tôi đã được học MVC WebAPI và tôi đi theo một hướng dẫn và tất cả mọi thứ đang diễn ra tốt đẹp cho đến khi tôi nhìn thấy những điều sau đây:Địa điểm sử dụng bên trong hoặc bên ngoài không gian tên?

namespace HelloWebAPI.Controllers 
{ 
    using HelloWebAPI.Models; 
    using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Net; 
    using System.Net.Http; 
    using System.Web.Http; 

    public class ProductsController : ApiController 
    {} 

Những gì chúng ta thường làm là chúng ta thêm các nguồn lực \ phạm vi trong đầu như thế này:

using HelloWebAPI.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 

namespace HelloWebAPI.Controllers 
{ 

    public class ProductsController : ApiController 
    {} 

Giám sát viên của tôi nói với tôi rằng điều đó là ổn và nó được cho là không sao, vì đó là hướng dẫn chính thức của MS về chủ đề này.

** Điều gì tôi muốn biết rằng tại sao điều này không quan trọng, để tôi hiểu rõ hơn về nó? **

+1

Vui lòng cập nhật tiêu đề của bạn http://meta.stackexchange.com/questions/10647/how-do-i-write-a-good-title –

Trả lời

5

Có sự khác biệt, nhỏ nhưng có.

Đó là tất cả về chuỗi độ phân giải tên được tạo bởi trình biên dịch. Câu trả lời tốt về chủ đề mà bạn có thể tìm thấy ở đây:

Should Usings be inside or outside the namespace

Trên thực tế trong trường hợp đầu tiên trình biên dịch, trong trường hợp không thể tìm thấy một loại thông tin ngay lập tức, sẽ tìm kiếm trong không gian tên tuyên bố bênusing. Trong trường hợp thứ hai, thay vào đó, sẽ tìm kiếm đầu tiên trong không gian tên thực tế và sau khi chỉ chuyển đến tìm kiếm bên trong được khai báo bên ngoài.

+0

Câu trả lời hay bằng các từ đơn giản. Cảm ơn. –

3

Bạn có thể xác định nhiều hơn một không gian tên trong tệp C#.

Đặt các câu lệnh using bên trong không gian tên nghĩa là chúng chỉ được sử dụng trong không gian tên đó cho tệp đó.

Đặt chúng bên ngoài vùng tên nghĩa là chúng áp dụng cho tất cả các không gian tên trong tệp.

Đó là loại phạm vi của tên biến chỉ áp dụng ở hầu hết các dấu ngoặc bên trong có chứa chúng và sâu hơn.

1

Sự khác biệt duy nhất là với phạm vi sử dụng câu lệnh. Nếu bạn sử dụng bên trong một không gian tên thì các câu lệnh sử dụng này sẽ được bao gồm trong tất cả các tệp đặt trong không gian tên đó. Và nếu bạn sử dụng các câu lệnh bên ngoài không gian tên thì các câu lệnh sử dụng này sẽ chỉ hợp lệ cho tệp hiện tại.

Tập 1:

namespace MyNamespace 
{ 
    using System; 
    using System.IO; 

    public MyClass 
    { 
    } 
} 

Tập 2:

namespace MyNamespace 
{ 
    public MyClassV2 
    { 
    } 
} 

Trong ví dụ này, bạn không cần phải thêm sử dụng trong file 2 cho MyClassV2 như MyNameSpace đã có các báo cáo sử dụng. Nhưng đối với một không gian tên khác, bạn cần thêm các câu lệnh bằng cách sử dụng.

+0

Bạn đã thực sự thử điều này chưa? –

+2

đây là câu trả lời sai và gây nhầm lẫn. –

+0

điều này là sai! – Gwny

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