深入理解 c# 第十四章 单个类型通过方法动态重载的解决方法 更加智能的C#编译器

    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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值