C#Polymorphysm:重载函数,接受委托Action和Func?
这是一个简单的代码,我尝试实现某种多态性.
您可以看到重载的Invoker函数,接受Func< T,R>和动作< T>作为一个论点. 如果使用Invoker方法,编译器说由于模糊不清而无法编译: class Program { static void Invoker(Action<XDocument> parser) { } static void Invoker(Func<XDocument,string> parser) { } static void Main(string[] args) { Invoker(Action); Invoker(Function); } static void Action(XDocument x) { } static string Function(XDocument x) { return ""; } } 我得到3(!)错误,但我无法解释.他们来了:
有任何想法吗? 解决方法
都
static void Action(XDocument x) 和 static string Function(XDocument x) 有相同的方法签名. 返回值不是方法签名的一部分.因此,只有不同的返回类型将无法正常工作.它们必须具有不同数量的参数或参数类型必须不同. 因为,编译器无法确定使用哪一个(采用Action的方法或采用Func的方法),您必须明确指定它: Invoker(new Action<XDocument>(Action)); Invoker(new Func<XDocument,String>(Function)); 解决歧义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |