2011-11-18 34 views
6

Như tiêu đề cho thấy, làm thế nào để hai phân biệt với nhau? Chúng ta có an toàn khi nói cả hai đều giống nhau không? Khi nào thì trường hợp tốt nhất chúng ta chọn cái kia? Tôi chỉ tình cờ gặp nó và tôi không chắc lắm. Tôi hy vọng ai đó có thể xóa bỏ những nghi ngờ của tôi. Cảm ơn trước.Sự khác biệt giữa this.GetType(). Assembly.GetName() Phiên bản và Assembly.GetExecutingAssembly(). GetName(). Phiên bản?

Trả lời

12

this.GetType() lấy loại đa hình của cá thể hiện tại, thực tế có thể là lớp con của lớp bạn đang gọi this.GetType() từ và lớp con đó có thể nằm trong một hội đồng khác.

xem xét như sau:

AssemblyA.dll:

public class Foo 
{ 
    public void PrintAssembly() 
    { 
     Console.WriteLine(this.GetType().Assembly.GetName()); 
     Console.WriteLine(Assembly.GetExecutingAssembly().GetName()); 
    } 
} 

AssemblyB.dll:

public class Bar : Foo 
{ 
} 

Bây giờ nếu bạn chạy các đoạn mã sau:

Bar b = new Bar(); 
b.PrintAssembly(); 

Các kết quả của hai cách để xác định hội đồng sẽ không phải là giống nhau; this.GetType().Assembly sẽ trả về AssemblyB (vì loại thực tế là thisBar), trong khi Assembly.GetExecutingAssembly() trả về AssemblyA, vì đó là assembly có chứa phương thức Foo.PrintAssembly().

Lần duy nhất bạn có thể chắc chắn rằng chúng tham chiếu đến cùng một cụm là nếu loại có chứa lệnh gọi đến this.GetType() được niêm phong.

+0

Bạn có chắc chắn về logic đó không? –

+0

@ Brandon: Vâng, tôi. :) – Sven

+1

Vâng +1 trong trường hợp đó! –

3

Một thông báo cho bạn biết phiên bản của Loại Lắp ráp thuộc về. Các khác cho bạn biết phiên bản của hội đồng hiện đang thực hiện. Nhưng bạn có biết rằng đã có.

Tôi tin rằng bạn có thể giả định một cách an toàn rằng assembly thực thi luôn giống như assembly mà 'this' là một phần của. Ít nhất thì tôi cũng không thể nghĩ tại sao nó không như vậy.

Cho dù bạn chọn cái này hay cái kia, vì mục đích rõ ràng, sẽ phụ thuộc vào việc bạn đang tìm kiếm lắp ráp loại hay lắp ráp đang thực hiện. Giả sử bố và sếp của bạn là cùng một người ... bạn có coi anh ta là ông chủ của bạn ở bàn ăn không? Hay bạn giới thiệu anh ta với bạn gái làm sếp của bạn? Sử dụng cái sẽ hợp lý với người tiếp theo đọc mã của bạn.

+0

Giải thích tuyệt vời, Brandon. Cảm ơn rất nhiều. – woodykiddy

+0

@woodykiddy Chào mừng bạn, nhưng khi nó quay ra bạn chỉ nên chú ý đến đoạn 1 và 3 :) –

+0

Không phải lo lắng. Tất cả chúng ta đều đã học được. :) – woodykiddy

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