2009-07-10 60 views
7

Đây là một câu hỏi mà tôi đã có một thời gian nhưng không bao giờ thực sự yêu cầu ...Toàn cầu :: có nghĩa là gì trong tệp .Net designer?

Trong rất nhiều tệp thiết kế mà Visual Studio tạo ra một số biến được đặt trước bằng toàn cục :: Có thể ai đó giải thích điều này có nghĩa là gì, tiền tố này làm gì và tôi nên sử dụng nó ở đâu?

Trả lời

12

Bộ định danh không gian tên chung cho phép bạn truy cập một thành viên trong vùng tên chung ("trống").

Nếu bạn gọi một loại không đủ tiêu chuẩn (ví dụ: MyClass.DoSomething() thay vì MyNamespace.MyClass.DoSomething()), thì nó được giả định là trong không gian tên hiện tại. Làm thế nào sau đó bạn có đủ điều kiện loại để nói rằng nó là trong không gian tên toàn cầu/trống?

mẫu mã này (giao diện điều khiển ứng dụng) nên minh họa hành vi của nó:

using System; 

namespace MyNamespace 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      MessageWriter.Write();   // writes "MyNamespace namespace" 
      global::MessageWriter.Write(); // writes "Global namespace" 
      Console.ReadLine(); 
     } 
    } 

    // This class is in the namespace "MyNamespace" 
    public class MessageWriter 
    { 
     public static void Write() 
     { 
      Console.WriteLine("MyNamespace namespace"); 
     } 
    } 
} 

// This class is in the global namespace (i.e. no specified namespace) 
public class MessageWriter 
{ 
    public static void Write() 
    { 
     Console.WriteLine("Global namespace"); 
    } 
} 
+0

Điều này không trả lời được câu hỏi tại sao. Mã được tạo sử dụng các loại được khai báo trong không gian tên và vẫn toàn cầu :: được sử dụng. –

+0

@Ihar: Toàn cầu được sử dụng theo cách tương tự để chỉ định rằng không gian tên không phải là tên phụ ... –

+0

Không - câu hỏi hỏi ba điều: Điều này có nghĩa là (giải thích), tiền tố này (giải thích) và ở đâu nên sử dụng nó (mà bạn sẽ biết khi bạn đã hiểu hai điểm còn lại). Câu hỏi của bạn - "tại sao nó được sử dụng trong các tệp thiết kế" không được hỏi bởi người hỏi ban đầu. –

1

Từ here

Khi nhận dạng trái là toàn cầu, việc tìm kiếm các định danh đúng bắt đầu từ không gian tên toàn cầu.

+0

Điểm đó để trả lời đúng. –

4

Tiền tố cho biết không gian tên chung. Dưới đây là ví dụ:

namespace Bar { 
    class Gnat { } 
} 
namespace Foo { 
    namespace Bar { 
    class Gnat { } 
    } 
    class Gnus { 
    Bar.Gnat a; // Foo.Bar.Gnat 
    global::Bar.Gnat b; // Bar.Gnat 
    } 
} 

Lưu ý cách thành viên có thể vô tình tham chiếu đến lớp Foo.Bar.Gnat. Để tránh điều này, hãy sử dụng tiền tố global ::.

+0

Làm thế nào nó liên quan đến mã được tạo ra? Không có loại nào từ các không gian tên chung được tham chiếu thường trong các lớp thiết kế .net. –

+0

Trình tạo mã muốn tham chiếu đến lớp Bar.Gnat. Nếu mã được tạo bên trong vùng tên Foo, lớp Foo.Bar.Gnat được tham chiếu trừ khi tiền tố :: global được sử dụng. Trình tạo mã muốn bảo vệ mã được tạo ra từ lỗi này. Đó là một chút hoang tưởng, nhưng tuy nhiên điều chính xác để làm, và có lẽ là một tiêu chuẩn nội bộ của Microsoft. –

3

toàn cầu :: namespace vòng loại được sử dụng trong tự động tạo ra để ngăn chặn va chạm trong loại giải quyết thông qua namespace lồng nhau.