重载的概念是:
方法名称相同,参数个数、次序、类型不同
因此重载对返回值没有要求,可以相同,也可以不同
但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载
如:
public int A(int i);
public double A(int i);
这2个方法不能构成重载,会有编译错误。
而:
public int A(int i):
public double A(double i);
这2个方法可以形成重载
不能,如果返回值不同,就是一个新的方法。
如果参数列表相同仅返回值不同是不允许的,有悖重载的定义;
如果参数列表不同,返回值不同是允许的。
把返回值定义为object就可以了啊
如果是基本数据类型 可以使用 Object 做为返回类型
CLR是支持返回值不同的重载的,但是C#、VB.NET等都不支持返回值不同的重载。
重载的定义是方法名相同、参数类型不同,满足此条件即可,对返回值没有规定。
参数类型相同则不能称为重载,所以参数类型相同、但返回值不同的重载是不合法的。
如果期望获得不同的返回,可以考虑使用泛型规定返回值类型:
public T GetMyObject<T>(string Name,int Length)
{
var o=new ……
...
return o as T;
}
返回值是泛型的,或者 object 都可以.
但是如你的题的话,不可以.
如 Zhang 提到的:
public int A(int i):
public double A(int i);
当你调用 object o = A(10) 的时候,编译器无法知道你要具体调用的是 int... 还是 double...,因为二者都匹配;正因为这个原因,就像反证法一样,大概就使得楼主说的情形不能成立了。
是不能有不同的返回值的。