模糊调用错误,两个函数都有不同的返回类型

时间:2011-10-24 19:37:27

标签: c# overloading

我有两个重载方法,都叫做FunctionX。其中一个返回一个Boolean对象,另一个返回一个名为Logs的预定义类。

我得到的错误是:以下方法或属性之间的调用不明确:'FunctionX(string)'和'FunctionX(string)'。

在我的其他一个方法中,我调用FunctionX(string),期望Log对象,但它抛出了这个错误。我认为编译器应该查看返回类型并自行计算。我该如何解决这个问题?

7 个答案:

答案 0 :(得分:2)

使用相同的签名不能有多个函数,例如

string Function1(bool t)
int Function1(bool t)

您需要为每个函数调用不同的名称,或者使用不同的参数,例如

string Function1(bool t)
int Function1(bool t, int g)

答案 1 :(得分:2)

您不能使方法重载以具有不同的返回类型。编译器如何知道在这里调用什么?

string Foo() { /* ... */ }
int Foo() { /* ... */ }

object f = Foo();

语言设计人员需要考虑所有情况,而不仅仅是那些最微不足道的情况。

答案 2 :(得分:2)

除了返回类型之外,编译器无法区分具有相同方法签名的函数。据我所知,没有编译器可以强类型。您必须以某种方式更改签名。选项是使用泛型函数并提供返回类型。

答案 3 :(得分:2)

虽然像Perl和Haskell 这样的语言通过返回类型支持重载,但大多数静态类型语言不支持按返回类型重写函数。因此,最好不要将这个小问题作为代码的一部分。

<强>加

您可以在此处的Stackoverflow讨论中找到更多答案:

Function overloading by return type?

答案 4 :(得分:1)

返回类型不会在C#中重载过载。

您可以,例如:

  1. 声明单独的函数FunctionXToLogFunctionXToBool
  2. FunctionX(string s, out Log logobject)FunctionX(string s, out bool value)
  3. 只是给你一个提示。

答案 5 :(得分:0)

您不能拥有两个具有相同签名的功能,只有不同的返回值!

答案 6 :(得分:0)

方法的签名是它的名称及其参数的类型 - 仅。它的返回类型是不是的签名部分。

因此您遇到了问题,因为这两种方法具有相同的签名。编译器不使用返回类型或所分配对象的类型来确定要调用的方法。

您必须指定所需方法的类名(假设这两个方法位于不同的类中)。或者您必须为其中一个方法提供另一个参数,以便为其提供不同的签名。或者,最后,您必须重命名其中一种方法才能使它们明确无误。