如何在运行时调用正确的重载函数?

时间:2008-12-01 13:29:06

标签: c# reflection

如果根据对象的实际类型引用对象,如何调用正确的重载函数。例如......

class Test
{
    object o1 = new object();
    object o2 = new string("ABCD");
    MyToString(o1);
    MyToString(o2);//I want this to call the second overloaded function


    void MyToString(object o)
    {
        Console.WriteLine("MyToString(object) called.");
    }

    void MyToString(string str)
    {
        Console.WriteLine("MyToString(string) called.");
    }
}

我的意思是有比下面更好的选择吗?

if(typeof(o) == typeof(string))
{
    MyToString((string)o);
}
else
{
    MyToString(o);
}

可以用反射来完成吗?

3 个答案:

答案 0 :(得分:3)

好的,一发帖,我记得这确实可以用反射来完成......

var methInfo = typeof(Test).GetMethod("MyToString", new Type[] {o.GetType()});
methInfo.Invoke(this, new object[] {o});

答案 1 :(得分:1)

您可以使用三元运算符使用一行简洁的代码对其进行编码:

MyToString(o is string ? (string)o : o);

答案 2 :(得分:0)

为什么在实际对象本身中没有toString()函数?这样你可以调用myObj.toString()并给出相对输出。然后你不必做任何比较。