0

可能重复:
关于 C# 中模糊调用的问题

我有这两种方法:

TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}

以下调用给了我“方法之间的歧义”错误:

TypeA ta = MyMethod("some string");

当我要求一个TypeA对象显式返回而不是通过var或以其他方式返回时,这是如何发生的?


TypeA并且TypeB是单独的类,它们没有任何共同点。

4

2 回答 2

11

从 C# 规范 v4.0,第 1.6.6 节:

方法的签名在声明该方法的类中必须是唯一的。方法的签名由方法的名称、类型参数的数量及其参数的数量、修饰符和类型组成。方法的签名不包括返回类型。

您有两个具有相同签名的方法,因为它们仅在返回类型上有所不同。这是不允许的。

于 2012-11-30T18:31:30.657 回答
1

如果您以这种方式调用方法,则不能重载返回类型

TypeA ta = MyMethod("some string");

那么编译器很明显可以选择一个方法。但是如果你以这种方式调用它会发生什么

MyMethod("some string");

你没有使用方法返回的值,那么编译器将无法选择合适的方法来调用,这就是为什么它是一个模棱两可的调用

于 2012-11-30T18:31:13.307 回答