Tôi vừa vấp phải một vấn đề rất thú vị. Cung cấp mã sau đây:Phương pháp đa hình không hoạt động trên C# 4
using System;
class Program
{
class A { }
class B : A { }
private static void MyMethod(A a) /* first method */
{
Console.WriteLine("A"); ;
}
private static void MyMethod(B b) /* second method */
{
Console.WriteLine("B");
}
static void Main(string[] args)
{
var a = new A();
// Call first method
MyMethod(a);
A b = new B();
// Should call the second method
MyMethod(b);
Console.ReadLine();
}
}
Tôi hy vọng phương thức thứ hai sẽ được gọi vì kiểu thời gian chạy của biến là B. Bất kỳ ý tưởng nào tại sao mã này gọi phương thức đầu tiên?
Cảm ơn, Tibi
Một số làm rõ: Đa hình nghĩa là nhiều hình thức mà không có gì để làm nơi bạn khai báo phương pháp này.
Quá tải phương thức là một dạng đa hình, đa hình đặc biệt.
Cách đa hình thường được thực hiện bằng cách sử dụng kết buộc muộn.
động là giải pháp cho sự cố này.
Thực tế là điều này không hoạt động trong C# (hoặc Java) nó là một sự phân chia thiết kế mà tôi muốn hiểu tại sao được tạo ra, và không có câu trả lời nào trả lời câu hỏi này.
/Tibi
Đây không phải là đa hình, bạn có hai trường hợp quá tải cùng một phương thức, mỗi trường hợp lấy các loại khác nhau làm tham số. Sau đó, bạn khai báo "b" là A. Trình biên dịch cho phép bạn làm điều này vì B thừa hưởng A. – Maess