Ily*_*gin 3 c# oop polymorphism c#-4.0
这是一个简单的代码,我尝试实现某种多态性.
您可以看到重载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 "";
}
}
Run Code Online (Sandbox Code Playgroud)
我得到3(!)错误,但我无法解释.他们来了:
错误1 以下方法或属性之间的调用不明确:'ConsoleApplication3.Program.Invoker(System.Action)'和'ConsoleApplication3.Program.Invoker(System.Func)'c:\ users\i.smagin\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 21 4 ConsoleApplication3
错误2 以下方法或属性之间的调用不明确:'ConsoleApplication3.Program.Invoker(System.Action)'和'ConsoleApplication3.Program.Invoker(System.Func)'c:\ users\i.smagin\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 22 4 ConsoleApplication3
错误3'字符串ConsoleApplication3.Program.Function(System.Xml.Linq.XDocument)' 具有错误的返回类型 c:\ users\i.smagin\documents\visual studio 2010\Projects\ConsoleApplication3\ConsoleApplication3\Program.cs 22 12 ConsoleApplication3
有任何想法吗?
都
static void Action(XDocument x)
Run Code Online (Sandbox Code Playgroud)
和
static string Function(XDocument x)
Run Code Online (Sandbox Code Playgroud)
有相同的方法签名.
返回值不是方法签名的一部分.因此,只有不同的返回类型将无法正常工作.它们必须具有不同数量的参数或参数类型必须不同.
因为,编译器无法确定使用哪一个(采用的方法Action或采用的方法Func),您必须明确指定它:
Invoker(new Action<XDocument>(Action));
Invoker(new Func<XDocument, String>(Function));
Run Code Online (Sandbox Code Playgroud)
解决歧义.
| 归档时间: |
|
| 查看次数: |
833 次 |
| 最近记录: |