C# Polymorphysm : overloading function, 接受委托(delegate) Action<T> 和 Func<T,R>?

标签 c# oop c#-4.0 polymorphism

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

可以看到重载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/

相关文章:

c# - 数据库数据更改时更新用户界面

c# - 从 LINQ to SQL 中提取 WHERE 子句

c# - GRPC C# - 众所周知的 grpc 类型存储在哪里以引用它们?无法导入 google.protobuf.Timestamp

c# - 如何向 WebRequest 添加 cookie?

php - 我有一个包含 14 个静态方法和 4 个静态属性的类——这样不好吗?

c# - VS2010 + NUnit 加载程序集失败?

java - 需要有关 java 中复杂结构的建议(DAO 和服务层链接/耦合)

c++ - 无法将术语添加到列出的列表类

c# - 与 oops 概念相关

.net - 如何国际化来自数据库的数据?