Phương pháp thứ hai của bạn được gọi, nếu tìm thấy kết hợp chính xác, nó được sử dụng trước thông số.
From MSDN:
Khi thực hiện giải quyết tình trạng quá tải, một phương pháp với một mảng tham số có thể được áp dụng một trong hai hình thức bình thường của nó hoặc dưới hình thức mở rộng của nó (mục 7.4.2.1). Dạng mở rộng của một phương thức chỉ có sẵn nếu hình thức bình thường của phương thức này không áp dụng được và chỉ khi một phương thức có cùng chữ ký với dạng mở rộng chưa được khai báo trong cùng một kiểu.
dụ của họ:
using System;
class Test
{
static void F(params object[] a) {
Console.WriteLine("F(object[])");
}
static void F() {
Console.WriteLine("F()");
}
static void F(object a0, object a1) {
Console.WriteLine("F(object,object)");
}
static void Main() {
F();
F(1);
F(1, 2);
F(1, 2, 3);
F(1, 2, 3, 4);
}
}
Output:
F();
F(object[]);
F(object,object);
F(object[]);
F(object[]);
Nguồn
2010-01-30 13:47:13
Điều này đặc biệt khó hiểu đối với mọi người khi họ gọi F (null). Bạn có nhận được F ((object []) null) hay F (đối tượng mới [] {null})? Nhiều người mong đợi sau này, nhưng kể từ khi cựu được áp dụng ở dạng bình thường, nó là tốt hơn. –
@Eric - Bạn không bao giờ ngừng ngạc nhiên với tôi với một câu hỏi khung sâu/thực tế tôi không bao giờ nghĩ đến ... nhưng cuối cùng sử dụng trong các tháng thực hành sau đó. Một số câu trả lời của bạn ở đây đã tạo ra những khác biệt hiệu suất to lớn đối với tôi, hãy giữ nó lên. –
Dọc theo dòng nhận xét của bạn, nếu bạn chưa đọc đặc tả chú thích được xuất bản bởi Microsoft, bạn thực sự nên; nó là một mỏ vàng. – jason