微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#函数重载规则

有关功能超载的规则是什么?

我有以下代码

public T genericFunc<T>() where T : Component,new()
{
    T result = new T();
    overloadedFunction( result );
}

private overloadedFunction ( Component c ) // catch all function

private overloadedFunction ( DerivedFromComponent dfc) // specific function

当我用以下代码调用上面的代码

genericFunc<DerivedFromComponent>();

我希望调用更具体的overloadedFunction,但是调用所有的函数是为什么被调用的呢?当通过上述代码时,类型T确实是DerivedFromComponent,我认为CLR在运行时选择了最好的匹配!

解决方法

当编译该方法时,编译器会在genericFunc中执行重载解析.在这一点上,它不知道你要提供什么类型的参数,所以它只知道它可以调用一个重载.

您使用泛型的示例使生活更加复杂,但是在编译时总是会解决重载(假设您不使用动态的).

一个简单的例子,不使用泛型:

void Foo(string text) { }
void Foo(object o) {}
...
object x = "this is a string";
Foo(x);

调用第二个重载,因为x的编译时类型只是对象.

有关更多信息,请阅读我最近的article on overloading.

原文地址:https://www.jb51.cc/csharp/93891.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐