如果根据对象的实际类型引用对象,如何调用正确的重载函数。例如......
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);
}
可以用反射来完成吗?
答案 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()并给出相对输出。然后你不必做任何比较。