在C#中超载,是有可能有相同的参数又互相覆盖(他们在返回类型不同)具有相同的参数签名
public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}
C#返回编译错误
在C#中超载,是有可能有相同的参数又互相覆盖(他们在返回类型不同)具有相同的参数签名
public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}
C#返回编译错误
至于我知道,这是不可能的。
即使它是,它是不必要的复杂。只需在所有情况下返回一个数组(如果只返回一个值,那么它就是一个Stocks数组[1])。这应该会节省一些时间,特别是因为C#使得数组非常简单。
在C#中,只能重载具有不同签名的方法。
的方法的返回类型不被包括在签名 - 只有方法的名称,类型和参数的数量(和它们的顺序)。这两个例子具有相同的签名,所以它们不能一起存在。
经典,可以恢复项目(数组或其他数据结构)的列表 - 如果只需要一个项目,你只需用一个项目返回一个列表。
我想,我会用一个列表 – Soham 2010-05-01 19:04:31
否 - 编译器抛出错误,因为它只使用参数来确定调用哪个方法,而不是返回类型。
@Adam V进 - 它也使用方法名;) – Oded 2010-05-01 16:18:41
@Oded - 想通这是不必要的说。 :) – 2010-05-01 16:21:34
@Oded,:)不像编译器会运行寻找接受特定参数序列的所有可能的方法,而不考虑名称......对不起,这个想法让我不得不分享。 – 2010-05-01 16:24:52
不,你不能。
CLR允许它,但由于某些原因,C#dudes决定不使用此CLR功能。
很难用一种被认为是C族成员的语言来支持,他们的成员通常没有情境依赖评估的概念。 – 2010-05-01 16:27:33
由于Oded已在他的回答中指出,当唯一的区别是返回类型时,不可能重载方法。
public override Stocks[] Search(string Field,string Param){ //some code}
public override Stocks Search(string Field, string Param){//some code}
想一想:编译器应该如何知道调用哪个方法变量?这显然取决于你的搜索结果,显然编译器不能提前知道。
其实,你想要的是一个函数有两种可能的返回类型。你不要想要的是两个独立的方法,因为你必须先决定哪一个要打电话。这显然是错误的方法。
一种解决方案是总是返回一个数组;在只有一个Stocks
找到对象的情况下,通过使用多个接口,返回尺寸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;
}
}
如果我没有指派返回值会发生什么,但而只是叫做“Search(field,param);'? – 2010-05-01 16:21:50
我明白你的暗示什么,我也想过这个问题为好, – Soham 2010-05-01 19:03:07