C#中的方法重载和动态关键字

时间:2011-04-29 18:39:23

标签: .net dynamic c#-4.0

我还没有升级到4.0,否则我会自己查看代码片段。但我希望有专家可以对此发表评论。

在下面的代码中,是否会在运行时调用相应的Print()方法?在C#2010中以这种方式调用它甚至是合法的吗?

public void Test()
{
    dynamic objX = InstantiateAsStringOrDouble();

    Print(objX);
}

public void Print(string s)
{
    Console.Write("string");
}

public void Print(double n)
{
    Console.Write("double");
}

谢谢!

2 个答案:

答案 0 :(得分:3)

是的,确实有效。它将在运行时检查动态的使用情况并调用适当的方法,但是几乎所有的编译时检查都会丢失,所以我确保这是你真正想做的事情。

答案 1 :(得分:2)

是的,您甚至可以这样做:

public dynamic InstantiateAsStringOrDouble() { return 0.5; }

public dynamic InstantiateAsStringOrDouble() { return "hello"; }

它将按预期工作。