C# 当返回类型为显式时,返回不同类型的方法之间的调用不明确
可能重复: 我有两种方法:C# 当返回类型为显式时,返回不同类型的方法之间的调用不明确,c#,ambiguous-call,C#,Ambiguous Call,可能重复: 我有两种方法: TypeA MyMethod(string s) {} TypeB MyMethod(string s) {} 以下调用使我在方法和错误之间产生歧义: TypeA ta = MyMethod("some string"); 当我要求TypeA对象显式返回而不是通过var或其他方式返回时,这是如何发生的 TypeA和TypeB是独立的类,它们没有任何共同点。如果以这种方式调用方法,则不能重载返回类型 TypeA ta = MyMethod("some string
TypeA MyMethod(string s) {}
TypeB MyMethod(string s) {}
以下调用使我在方法和错误之间产生歧义:
TypeA ta = MyMethod("some string");
当我要求TypeA对象显式返回而不是通过var或其他方式返回时,这是如何发生的
TypeA和TypeB是独立的类,它们没有任何共同点。如果以这种方式调用方法,则不能重载返回类型
TypeA ta = MyMethod("some string");
那么编译器显然会选择一个方法,但是如果用这种方式调用它会发生什么呢
MyMethod("some string");
如果未使用该方法返回的值,则编译器将无法选择要调用的适当方法,这就是为什么它是来自C spec v4.0第1.6.6节的不明确调用的原因: 方法的签名在包含 方法被声明。方法的签名由 方法、类型参数的数量以及修饰符的数量, 以及其参数的类型。方法的签名不存在 包括返回类型
您有两个具有相同签名的方法,因为它们只在返回类型上不同。这是不允许的。因为函数接受一个字符串,并且它的名称相同,所以不明确。如何从这两个方法开始?你不应该那样超载。请给出一个简短但完整的示例,其中唯一无法编译的是对方法的调用。TypeA和TypeB将始终将Object作为公共基类。因为返回类型不是方法签名的一部分。@Hamlet是的,它是。IL支持它—C不支持。