Về cơ bản, trình biên dịch giải quyết những gì phương pháp được gọi trên một đối tượng (ví dụ, khi đối tượng đó được truyền như một tham số) dựa trên đối tượng mà tuyên bố loại. Vì vậy, nếu bạn có một biến gõ là Parent
và bạn vượt qua nó để doStuff
, trình biên dịch sẽ giải quyết rằng phương thức gọi là quá tải lấy Parent
, ngay cả khi thời gian chạy mà đối tượng hóa ra là SubOfParent
.
Phương pháp gọi bởi một đối tượng (ví dụ, phương pháp thể hiện của một lớp) đa hình triển lãm trong thời gian chạy: phương pháp thực hiện được dựa trên đối tượng thực tế loại.
Vì vậy, nếu bạn có điều này:
class Parent
{
public virtual void doStuff() { }
}
class SubOfParent : Parent
{
public override void doStuff() { }
}
Parent p = new SubOfParent();
p.doStuff();
Sau đó mã sẽ làm việc như bạn mong đợi.
Nguồn
2010-07-16 13:06:42
http://stackoverflow.com/questions/479923/is-ca-single-dispatch-or-multiple-dispatch-language –
Xin vui lòng gửi mã, từ bối cảnh này không ai có ý tưởng – Yakeen
@ Yakeen, có đủ mã ở đây để biết những gì là sai. – tster