2010-02-27 44 views

Trả lời

22

Về cơ bản bạn chỉ thực sự cần nó khi bạn muốn sử dụng hai loại có cùng tên đủ điều kiện (cùng một không gian tên, cùng tên loại) từ các hội đồng khác nhau. Bạn khai báo một bí danh khác nhau cho mỗi assembly, vì vậy bạn có thể tham khảo chúng thông qua bí danh đó.

Không cần phải nói, bạn nên cố gắng tránh đi vào hoàn cảnh đó để bắt đầu với :)

Anson Horton có good blog post về nó.

+0

Chỉ cần thêm - ngay cả sau khi thêm extern khai báo bí danh ở phía trên cùng của tệp comsumer * .cs, trình biên dịch theo mặc định không tìm kiếm kiểu tôi đang sử dụng (có mặt trong assembly đó). Hành vi mặc định của trình biên dịch luôn luôn là tìm kiếm các lớp và kiểu trong hiện tại và các assembly được tham chiếu có 'global' alias.I kết thúc bằng cách sử dụng tên kiểu đầy đủ bắt đầu với tên bí danh extern tuyên bố bí danh extern của tôi là 'bí danh extern WidgetsVendor1;' và tôi vẫn đang viết mã như 'var wid = new WidgetsVendor1.Widgets.Widget();'. Tôi không thể đơn giản làm-'var wid = new Widgets.Widget() ; ' – RBT

+1

@RBT: Không, chỉ * tuyên bố * bí danh. Nhưng bạn có thể có 'bằng cách sử dụng WidgetsVendor1.Widgets;' và viết 'var wid = new Widget();'. –

+0

ohh. Hấp dẫn! Tôi không biết điều đó. Tôi đăng bình luận của mình dựa trên quan sát của tôi mà tôi có vào buổi sáng. Thật tốt khi biết điều đó. Tôi có thể nhập các không gian tên bên trong bí danh bên ngoài bằng cách sử dụng từ khoá 'using'. Cảm ơn. – RBT

23

Nó ở đó để giúp bạn trói mình ra khỏi một lỗ sâu thực sự được đào bằng phiên bản. Giả sử phiên bản đầu tiên của chương trình của bạn sử dụng lớp này

using System; 

namespace Acme.Financial.Banking { 
    [Serializable] 
    public class BankAccount { 
    public double Balance { get; set; } 
    //... 
    } 
} 

Và bạn đã sắp xếp hàng loạt các bản ghi tài khoản ngân hàng với nó. Và một kế toán bắt đầu phàn nàn về bảng cân đối bị giảm một phần tỷ của một xu, vì vậy bạn thay đổi lớp học:

public decimal Balance { get; set; } 

Vấn đề được giải quyết, khách hàng tiếp theo có bảng cân đối hạnh phúc. Cho đến khi bạn được yêu cầu nâng cấp một khách hàng hiện tại với nhiều bản ghi được tuần tự hóa ở định dạng cũ. Vấn đề lớn, bạn không thể deserialize các hồ sơ nữa kể từ khi lớp học đã thay đổi.

bí danh bên ngoài giải quyết vấn đề của bạn, bạn có thể tham chiếu cả phiên bản cũ và phiên bản mới của lớp trong mã của bạn, ngay cả khi tên không gian tên và tên lớp giống nhau.

+1

Trường hợp sử dụng rất sâu sắc để sử dụng bí danh bên ngoài. – RBT

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