Tôi có một nghi ngờ liên quan đến quá tải phương thức C# và độ phân giải cuộc gọi.Tại sao C# gọi khác nhau cho các phương thức quá tải cho các giá trị khác nhau cùng loại?
Giả sử tôi có mã C# sau:
enum MyEnum { Value1, Value2 }
public void test() {
method(0); // this calls method(MyEnum)
method(1); // this calls method(object)
}
public void method(object o) {
}
public void method(MyEnum e) {
}
Lưu ý rằng tôi biết làm thế nào để làm cho nó làm việc nhưng tôi muốn biết lý do tại sao cho một giá trị của int (0) nó gọi một phương pháp và cho khác (1) nó gọi khác. Nghe có vẻ khó xử vì cả hai giá trị đều có cùng kiểu (int) nhưng chúng được "liên kết" cho các phương thức khác nhau.
Câu hỏi đầu tiên tuyệt vời! –
Áp dụng cho tuyên bố này cũng MyEnum e = 0; Nhưng bạn sẽ nhận được lỗi trình biên dịch (yêu cầu chuyển đổi rõ ràng) nếu viết MyEnum e = 1; – RockWorld
Bản sao của http://stackoverflow.com/questions/1633168/why-does-c-3-allow-the-implicit-conversion-of-literal-zero-0-to-any-enum –