Tôi nghĩ rằng phương pháp được gọi là quyết định thời gian chạy, hoặc tôi đã bỏ lỡ một cái gì đó? Mẫu mã:Tại sao phương pháp quá tải không được gọi?
class Program
{
static void Main(string[] args)
{
var magic = new MagicClass();
magic.DoStuff(new ImplA());
magic.DoStuff(new ImplB());
Console.ReadLine();
}
}
class MagicClass
{
internal void DoStuff<T>(T input) where T : SomeBase
{
HiThere(input);
}
void HiThere(SomeBase input)
{
Console.WriteLine("Base impl");
}
void HiThere(ImplA input)
{
Console.WriteLine("ImplA");
}
void HiThere(ImplB input)
{
Console.WriteLine("ImplB");
}
}
abstract class SomeBase
{
}
class ImplA : SomeBase{}
class ImplB : SomeBase{}
Tôi nghĩ tôi sẽ nhận được:
ImplA
ImplB
như đầu ra nhưng nó in Base impl
. Có bất cứ điều gì tôi có thể làm để có được phương pháp quá tải mà không cần đúc đầu vào?
Đây là một lời giải thích khá hợp lý tại sao: http://csharpindepth.com/Articles/General/Overloading.aspx –