加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#Polymorphysm:重载函数,接受委托Action和Func?

发布时间:2020-12-16 10:28:46 所属栏目:百科 来源:网络整理
导读:这是一个简单的代码,我尝试实现某种多态性. 您可以看到重载的Invoker函数,接受Func T,R和动作 T作为一个论点. 如果使用Invoker方法,编译器说由于模糊不清而无法编译: class Program{ static void Invoker(ActionXDocument parser) { } static void Invoker(
这是一个简单的代码,我尝试实现某种多态性.

您可以看到重载的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(!)错误,但我无法解释.他们来了:

Error 1 The call is ambiguous between the following methods or properties: ‘ConsoleApplication3.Program.Invoker(System.Action)’ and ‘ConsoleApplication3.Program.Invoker(System.Func)’ c:usersi.smagindocumentsvisual studio 2010ProjectsConsoleApplication3ConsoleApplication3Program.cs 21 4 ConsoleApplication3

Error 2 The call is ambiguous between the following methods or properties: ‘ConsoleApplication3.Program.Invoker(System.Action)’ and ‘ConsoleApplication3.Program.Invoker(System.Func)’ c:usersi.smagindocumentsvisual studio 2010ProjectsConsoleApplication3ConsoleApplication3Program.cs 22 4 ConsoleApplication3

Error 3 ‘string ConsoleApplication3.Program.Function(System.Xml.Linq.XDocument)’ has the wrong return type c:usersi.smagindocumentsvisual studio 2010ProjectsConsoleApplication3ConsoleApplication3Program.cs 22 12 ConsoleApplication3

有任何想法吗?

解决方法

static void Action(XDocument x)

static string Function(XDocument x)

有相同的方法签名.

返回值不是方法签名的一部分.因此,只有不同的返回类型将无法正常工作.它们必须具有不同数量的参数或参数类型必须不同.

因为,编译器无法确定使用哪一个(采用Action的方法或采用Func的方法),您必须明确指定它:

Invoker(new Action<XDocument>(Action));
Invoker(new Func<XDocument,String>(Function));

解决歧义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读