class DoubleOverloading
{
static void Execute(dynamic x, string y)
{
Console.WriteLine("dynamic, string");
}
static void Execute(dynamic x, object y)
{
Console.WriteLine("dynamic, object");
}
static void Main()//单个类型通过方法动态重载的解决方法 更加智能的C#编译器
{
object text = "text";
//"text"
dynamic d = 10;
//10
Execute(d, text);
}
}
在执行时绑定器行为的理想模式是,假设源代码中没有动态值,我们知道值的确切类型: 即
执行时实际值的类型。这仅适用于表达式中的动态值;任何在编译时知道的类型,都仍将
用于查找,如成员决策。
这里的text是个重要的变量。其编译时类型为object,但执行时的值为字符串引用。对
Execute的调用是动态的,因为我们使用了动态变量d作为一个参数,但重载决策使用了text
的静态类型,因此结果为dynamic、object。如果text变量也声明为dynamic,则将使用
另一个重载。
输出
dynamic, object