2016-08-30 17 views
18

Tôi có một lớp như sau với hai phương pháp quá tải.Quá tải phương pháp với tham số tùy chọn

Class A 
{ 
    public string x(string a, string b) 
    { 
     return "hello" + a + b; 
    } 

    public string x(string a, string b, string c = "bye") 
    { 
     return c + a + b; 
    } 
} 

Nếu tôi gọi phương thức x từ một lớp khác có hai tham số, thì phương pháp nào sẽ thực thi và tại sao? tức là,

string result = new A().x("Fname", "Lname"); 

Tôi đã thử nghiệm điều này trong ứng dụng bảng điều khiển và phương thức có 2 tham số thực thi. Ai đó có thể giải thích điều này?

+0

Về cơ bản: trong trường hợp đó hoàn toàn vô dụng để có giá trị mặc định vì bạn sẽ không bao giờ sử dụng nó ... – Bakuriu

+6

Tôi ngạc nhiên khi mã này không đưa ra lỗi thời gian biên dịch. –

Trả lời

21

Sử dụng các đối số được đặt tên và không bắt buộc ảnh hưởng đến độ phân giải quá tải:

Nếu hai ứng cử viên được đánh giá là tương đương tốt, ưu tiên đi vào một ứng cử viên mà không có thông số tùy chọn mà lập luận được bỏ qua trong gọi điện. Đây là hậu quả của tùy chọn chung của ở độ phân giải quá tải đối với các ứng viên có ít thông số .

tham khảo: MSDN


Ngụ ý phương pháp quy tắc trên với 2 thông số string x(string a,string b) sẽ được gọi.

Lưu ý: Nếu cả hai phương pháp quá tải có thông số tùy chọn thì trình biên dịch sẽ cung cấp lỗi mơ hồ biên dịch theo thời gian.

+5

Biên dịch sẽ cung cấp cho *** một thời gian biên dịch *** lỗi mơ hồ :) –

+1

được lưu ý và sửa chữa. Cảm ơn. – JerryGoyal

4

Nếu bạn gọi Phương thức với hai Tham số, nó sử dụng Phương thức có hai Tham số. Nếu bạn gọi một với ba, nó sẽ sử dụng cái kia.

0

Nó sẽ luôn luôn thực hiện phương pháp mà trận đấu đầu tiên với chính xác không có các thông số, trong trường hợp của bạn nó sẽ thực hiện:

phương pháp tham số tùy chọn ưu tiên là ít hơn nhưng chức năng với chính xác không có các thông số

public string x(string a, string b); 
Các vấn đề liên quan