我有这两种方法:
TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}
以下调用给出了我"方法之间的歧义"错误:
TypeA ta = MyMethod("some string");
当我要求TypeA
对象明确返回而不是通过var
或其他方式返回时,会发生什么情况?
TypeA
和TypeB
是不同的类,他们没有任何共同之处。
答案 0 :(得分:11)
从C#规范v4.0开始,第1.6.6节:
方法的签名在其中的类中必须是唯一的 方法被声明。方法的签名由名称组成 方法,类型参数的数量和数量,修饰符, 及其参数的类型。方法的签名没有 包括返回类型。
您有两种具有相同签名的方法,因为它们仅在返回类型上有所不同。这是不允许的。
答案 1 :(得分:1)
如果以这种方式调用方法,则不能重载返回类型
TypeA ta = MyMethod("some string");
那么编译器选择一个方法是显而易见的。但是如果以这种方式调用它会发生什么
MyMethod("some string");
你没有使用该方法返回的值,那么编译器将无法选择适当的方法来调用,这就是为什么它是一个模糊的调用