C#dynamic重载参数决策

C# 4 引入了一个新类型 dynamic。 该类型是一种静态类型,但类型为 dynamic 的对象会跳过静态类型检查。 大多数情况下,该对象就像具有类型 object 一样。
知识点
dynamic类型会隐式转会为赋值类型。编译的时候均可通过,但是运行时会出现不对应的参数出错。
代码

using System;
using System.Text;

namespace Test
{

    class Program
    {
        static void Foo(object x, object y) { Console.WriteLine("oo"); }
        static void Foo(object x, string y) { Console.WriteLine("os"); }
        static void Foo(string x, object y) { Console.WriteLine("so"); }
        static void Foo(string x, int y) { Console.WriteLine("ss"); }
        static void Foo(object x, object y,int z) { Console.WriteLine("xyz"); }
        static void Main()
        {
            object o = "hello";
            dynamic d = "goodbye";
            int a = 1;
            dynamic e = a;
            Foo(d, e); //第一个参数为d string 第二个参数为e 隐式类型为int 结果为传参为(string,int) result:ss
            Foo(o, d);//第一个参数为o object 第二个参数为d string 结果为传参为(object,string) result:os
            Foo(e, e);//第一个参数为e 隐式类型int  第二个参数为e int 结果为传参为(object,object) result:os 此时没有(int,int)类型的重载 会默认为object result:oo
            //下列写法编译不会出错 但是运行会出e错 因为没有(object,object,stirng)的重载
            //Foo(e, e,d);//第一个参数为e 隐式类型int  第二个参数为e int 第三个参数为d string 结果为传参为(object,object,int) result:os 此时没有(int,int)类型的重载 会默认为object result:oo
            Foo(e, e,e );//result:xyz
            Console.ReadKey();
        }
    }

}

效果示例:

在这里插入图片描述
总结:
dynamic会优先匹配隐式转换符,如果没有会装箱成object去传值。假如都没有对应的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值