C#函数重载规则
发布时间:2020-12-15 03:44:10 所属栏目:百科 来源:网络整理
导读:有关功能超载的规则是什么? 我有以下代码: public T genericFuncT() where T : Component,new(){ T result = new T(); overloadedFunction( result );}private overloadedFunction ( Component c ) // catch all functionprivate overloadedFunction ( Der
有关功能超载的规则是什么?
我有以下代码: 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |