2011-01-19 58 views

Trả lời

5

với :: bạn có thể làm những việc như ...

extern alias X; 
extern alias Y; 
class Test 
{ 
    X::N.A a; 
    X::N.B b1; 
    Y::N.B b2; 
    Y::N.C c; 
} 

và có những lúc. là mơ hồ như vậy :: là cần thiết. đây là ví dụ từ ngôn ngữ C# đặc tả

namespace N 
{ 
    public class A {} 
    public class B {} 
} 
namespace N 
{ 
    using A = System.IO; 
    class X 
    { 
     A.Stream s1;   // Error, A is ambiguous 
     A::Stream s2;  // Ok 
    } 
} 

http://download.microsoft.com/download/0/B/D/0BDA894F-2CCD-4C2C-B5A7-4EB1171962E5/CSharp%20Language%20Specification.htm

+0

Vì vậy, bạn đang nói rằng '::' chỉ làm việc với không gian tên, trong khi '.' làm việc với tất cả mọi thứ ngoại trừ' global'? – Mehrdad

+0

có, thực tế là :: chỉ dành cho không gian tên có nghĩa là bạn có thể sử dụng nó để giải quyết sự mơ hồ mà không thể được giải quyết bằng. –

6

những :: operator chỉ làm việc với bí danh toàn cầu là một hệ thống đặc biệt được cung cấp bí danh.

như vậy ... làm việc này:

using Foo = System.ComponentModel; 

public MyClass { 

    private Foo::SomeClassFromSystemComponentModel X; 

} 

nhưng không này:

public MyClass { 

    private System.ComponentModel::SomeClassFromSystemComponentModel X; 

} 

này cho phép bạn thoát khỏi địa ngục của phụ namespace có thể xảy ra khi bạn đang tích hợp với thư viện nơi họ có:

namespace MyAwesomeProduct.System 
{ 

} 

Và mã bạn có

using MyAwesomeProduct; 

toàn cầu :: cho phép bạn tìm thấy Hệ thống thực.

MSDN info here

+0

Hm ... bạn đang giải thích lý do tại sao 'global ::' rất hữu ích, nhưng không chính xác sự khác biệt giữa '::' và '. ... – Mehrdad

+2

:: * only * hoạt động với các dấu chấm - theo cách đó nếu ai đó khai báo một không gian tên hoặc một không gian tên phụ sau đó có cùng một không gian tên như bạn bí danh mã của bạn sẽ được sử dụng tốt. Đó là thoát ra khỏi nhà điều hành nhà tù cho độ phân giải không gian tên phụ nếu bạn muốn. Bạn có quyền kiểm soát các thuật toán alaises trong tệp của mình - nhưng những người khác kiểm soát các không gian tên của các thư viện mà bạn sử dụng. :: cung cấp cho bạn quyền kiểm soát khi các không gian tên khác thay đổi để thay đổi ý nghĩa của mã của bạn. – Neil

+0

+1 Tuyệt vời, cảm ơn. – Mehrdad

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