在尝试仅基于返回类型重载函数时会调用什么?
即:
Public String DoWork()
Public int DoWork()
你不能做到这一点,对吧?
那叫做协方差吗?
答案 0 :(得分:5)
它仍被称为“方法过载”,但有时您会听到更详细的“返回类型方法过载”。在C#中是不可能的。
来自C#规范:
方法的签名在声明方法的类中必须是唯一的。方法的签名包括方法的名称,类型参数的数量以及数量,修饰符和参数类型。方法的签名不包括返回类型。
答案 1 :(得分:2)
不,协方差是指在覆盖不重载时更改返回类型。
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#,但我相信它应该支持这种技术。