मैंने सोचा कि जिस विधि को बुलाया जा रहा है उसे रनटाइम का फैसला किया गया है, या क्या मुझे कुछ याद आया है? नमूना कोड:ओवरलोडेड विधि क्यों नहीं बुलाई जा रही है?
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{}
मैंने सोचा कि मैं मिलेगा:
ImplA
ImplB
आउटपुट के रूप में
लेकिन यह Base impl
प्रिंट करता है। क्या इनपुट कास्टिंग किए बिना अधिभारित विधि प्राप्त करने के लिए मैं कुछ भी कर सकता हूं?
यहां एक सुंदर सभ्य स्पष्टीकरण है: http://csharpindepth.com/Articles/General/Overloading.aspx –