c# – 重载分辨率奇怪
发布时间:2020-12-15 04:19:21 所属栏目:百科 来源:网络整理
导读:不确定这是否是特定的C#4,但只是注意到了这一点. 考虑以下类: class Base{ protected void Foo(object bar,DayOfWeek day) { }}class Program : Base{ protected void Foo(object bar,object baz) { } void Bar(DayOfWeek day) { Foo(new { day },day); }}
不确定这是否是特定的C#4,但只是注意到了这一点.
考虑以下类: class Base { protected void Foo(object bar,DayOfWeek day) { } } class Program : Base { protected void Foo(object bar,object baz) { } void Bar(DayOfWeek day) { Foo(new { day },day); } } 在Bar中调用Foo,解析为Foo(对象,对象). 将其更改为: class Base { } class Program : Base { protected void Foo(object bar,object baz) { } protected void Foo(object bar,DayOfWeek day) { } void Bar(DayOfWeek day) { Foo(new { day },解析为Foo(object,DayOfWeek). 解决方法
我认为对于解析方法调用它首先在它的类中查找,因为DayOfWeek可以作为对象类型传递,它调用类自己的方法,而不是基类中的方法.
在第二种情况下,方法调用解析为更具体的类型参数,因此调用Foo(对象栏,DayOfWeek日). 来自MSDN – Method resolution.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |