在尝试仅基于返回类型重载函数时会调用什么?

时间:2010-01-01 13:38:04

标签: c#

在尝试仅基于返回类型重载函数时会调用什么?

即:

Public String DoWork()

Public int DoWork()

你不能做到这一点,对吧?

那叫做协方差吗?

5 个答案:

答案 0 :(得分:5)

它仍被称为“方法过载”,但有时您会听到更详细的“返回类型方法过载”。在C#中是不可能的。

来自C#规范:

  

方法的签名在声明方法的类中必须是唯一的。方法的签名包括方法的名称,类型参数的数量以及数量,修饰符和参数类型。方法的签名不包括返回类型。

答案 1 :(得分:2)

不,协方差是指在覆盖不重载时更改返回类型。

来自wikipedia

 class A {
 }

 class B extends A {
 }

 // Classes demonstrating method overriding:

 class C {
     A getFoo() {
         return new A();
     }
 }

 class D extends C {
     B getFoo() {
         return new B();
     }
 }

答案 2 :(得分:1)

另一种方法是使用泛型:

public T DoWork<T>()
{
}

修改语法;返回类型不会包含在尖括号中。

答案 3 :(得分:0)

返回类型不包含在方法的签名中。这就是为什么你不能有两个只有返回类型不同的方法。

答案 4 :(得分:0)

您需要使用中间类型来获取此行为。这是a way to do it in C++。我不太了解C#,但我相信它应该支持这种技术。