2010-02-20 24 views
13

Có thể khai báo một bí danh với loại .net không? trong C# và nếu như vậy làm thế nào?Có thể khai báo bí danh bằng loại .net không?

+0

thể trùng lặp của [? Làm thế nào để bí danh một tên lớp trong C#] (http://stackoverflow.com/questions/244246/how-do-i-alias-a-class-name-in-c) – nawfal

Trả lời

20

Ví dụ:

using MatchBuilderFactoryFunc = System.Func< 
    IndexerBase.RequestMatching.RequestFreeTextAnalyzeParameter, 
    System.Collections.Generic.IEnumerable< 
     IndexerBase.RequestMatching.IMatchBuilder>>; 

Và sau khi tất cả sử dụng nó kiểu như đơn giản:

MatchBuilderFactoryFunc f = ... 
+4

+1, Không bao giờ xem xét sử dụng theo cách này –

1

Có. sử dụng chỉ thị using.

Nếu bạn tìm kiếm với cụm từ "bí danh C#", bạn cũng sẽ tìm thấy câu trả lời dễ dàng.

+0

Điều này là chính xác. http://www.codeproject.com/KB/dotnet/Data_Type_Alias__Net.aspx hiển thị ví dụ. – awright18

1

Vâng, using thể làm điều đó

using q = System.Int32; 
4
using XDoc = System.Xml.Linq.XDocument; 

Tuy nhiên, nó chỉ tồn tại cho việc biên soạn một tệp C#. Bạn không thể xuất bí danh này.

33

Như những người khác đã nói, hãy sử dụng "using alias = type;" hình thức của chỉ thị sử dụng. Vài điều về điều đó:

1) Nó phải là thứ đầu tiên trong tệp hoặc vùng tên. (Trừ khi bạn có chỉ thị bí danh bên ngoài tất nhiên; chúng sẽ đi trước chỉ thị sử dụng.)

2) Bí danh không phải là loại thực. Rất nhiều người muốn xem:

using PopsicleCount=System.Int32; 
using GiraffeCount=System.Int32; 
... 
PopsicleCount p = 123; 
GiraffeCount g = p; // ERROR, can't convert a count of giraffes into a count of popsicles 

Nhưng chúng tôi không hỗ trợ tính năng đó. Đó là một bí danh thực sự; chúng tôi chỉ thay thế loại tăng đột biến cho từ định danh bí danh khi chúng ta thấy nó; p và g là cả hai loại int.

3) Bí danh chỉ áp dụng trong khai báo tệp hoặc không gian tên mà nó xuất hiện. Nếu bạn muốn sử dụng bí danh trong mọi tệp trong chương trình, bạn sẽ phải ghi nó trong mọi tệp trong chương trình của mình.

4) Bí danh không thể được tham số hóa ở phía tên bí danh, mặc dù chúng có thể được đóng chung loại ở bên loại. Đó là, điều này là hợp pháp:

using GiraffeList = System.Collections.Generic.List<Giraffe>; 

nhưng đây không phải là:

using Frobtionary<T> = System.Collections.Generic.Dictionary<Frob, T>; 
+0

Bạn nói đúng Tôi thực sự muốn 2) trong danh sách của bạn. –