在C#中,是否可以使相同的参数相互覆盖(它们在返回类型中不同)
public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}
C#返回编译错误
答案 0 :(得分:11)
在C#中,您只能重载具有不同签名的方法。
签名中不包含方法的返回类型 - 仅包括方法名称,类型和参数数量(及其顺序)。这两个例子具有相同的签名,因此它们不能一起存在。
经典地,人们可以返回项目的列表(数组或其他数据结构) - 如果只需要一个项目,您只需返回一个包含一个项目的列表。
答案 1 :(得分:3)
正如Oded已经在他的回答中指出的那样,当唯一的区别是返回类型时,不可能重载方法。
public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}
考虑一下:编译器应该如何知道要调用哪个方法变体?这显然取决于您的搜索结果,显然编译器无法提前知道。
事实上,你想要的是一个函数,它有两种可能的返回类型。您不想要的是两种不同的方法,因为您必须事先决定调用哪一种方法。这显然是错误的做法。
一种解决方案是始终返回一个数组;如果只找到一个Stocks
对象,则返回一个大小为1的数组。
答案 2 :(得分:1)
通过使用多个接口的方式:
struct Stock { public string Symbol; public decimal Price;}
interface IByArray { Stock[] Search(string Field, string Param); }
interface IByClass { Stocks Search(string Field, string Param); }
class Stocks : IByArray, IByClass
{
Stock[] _stocks = { new Stock { Symbol = "MSFT", Price = 32.83m } };
Stock[] IByArray.Search(string Field, string Param)
{
return _stocks;
}
Stocks IByClass.Search(string Field, string Param)
{
return this;
}
}
答案 3 :(得分:0)
据我所知,这是不可能的。
即使它是,它也不必要地复杂化。只是在所有情况下返回一个数组(如果只返回一个值,那么它是一个Stocks [1]数组)。这应该可以节省一些时间,特别是因为C#使得使用数组非常简单。
答案 4 :(得分:0)
否 - 编译器抛出错误,因为它只使用参数来确定要调用的方法,而不是返回类型。
答案 5 :(得分:0)
不,你不能。
CLR允许它,但由于某种原因,C#dudes决定不使用此CLR功能。