2011-11-22 23 views
11

thể trùng lặp:
C#: Passing null to overloaded method - which method is called?Phương pháp quá tải và giá trị null

Hãy xem xét những phương pháp 2:

void Method(object obj) { Console.WriteLine("object"); } 
void Method(int[] array) { Console.WriteLine("int[]"); } 

Khi tôi cố gắng gọi:

Method(null); 

trong Visual Studio 2008 SP1 Tôi nhận được int[].

Tại sao điều này?

+3

Anh ấy có thể hỏi tại sao trình biên dịch lại ưu tiên quá tải đó. – Vlad

+0

Câu hỏi của ông là tại sao độ phân giải quá tải giải quyết null cho phương thức lấy một mảng int chứ không phải là một đối tượng cần có. –

+1

Xem câu hỏi này: http://stackoverflow.com/q/719546/25727 – Jan

Trả lời

11

Đây là sản phẩm có độ phân giải quá tải. Đối số của bạn, null, có thể chuyển đổi thành cả hai số objectint[]. Do đó, trình biên dịch chọn phiên bản cụ thể nhất, bởi vì int[] cụ thể hơn object.

+5

+1: "Cụ thể hơn" được định nghĩa là "một' int [] 'có thể được ngầm đúc đến một' đối tượng', nhưng một 'đối tượng' không thể được ngầm đúc đến một' int [] '." – StriplingWarrior

1

Vì int [] cụ thể hơn đối tượng, phương pháp với tham số đối tượng sẽ bị bỏ qua. Nếu bạn gọi phương thức ("Some string"), phương thức với tham số-đối tượng sẽ được gọi.

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