gpt4 book ai didi

C# Polymorphysm : overloading function, 接受委托(delegate) Action 和 Func

转载 作者:行者123 更新时间:2023-11-30 13:24:22 26 4
gpt4 key购买 nike

这是一个简单的代码,我尝试在其中实现某种多态性。

可以看到重载Invoker函数,接受 Func<T,R>Action<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:\users\i.smagin\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.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:\users\i.smagin\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 22 4 ConsoleApplication3

Error 3 'string ConsoleApplication3.Program.Function(System.Xml.Linq.XDocument)' has the wrong return type c:\users\i.smagin\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.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));

解决歧义。

关于C# Polymorphysm : overloading function, 接受委托(delegate) Action<T> 和 Func<T,R>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4956980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com