首页 新闻 会员 周边

重载方法的返回值是否可以不同类型?

0
悬赏园豆:10 [已解决问题] 解决于 2009-07-14 08:48

如题!

J.z的主页 J.z | 初学一级 | 园豆:180
提问于:2009-06-11 11:40
< >
分享
最佳答案
3

重载的概念是:

方法名称相同,参数个数、次序、类型不同

因此重载对返回值没有要求,可以相同,也可以不同

但是如果参数的个数、类型、次序都相同,方法名也相同,仅返回值不同,则无法构成重载

如:

public int A(int i);

public double A(int i);

这2个方法不能构成重载,会有编译错误。

而:

public int A(int i):

public double A(double i);

这2个方法可以形成重载

Gray Zhang | 专家六级 |园豆:17610 | 2009-06-11 13:58
其他回答(9)
0

不能,如果返回值不同,就是一个新的方法。

Launcher | 园豆:45045 (高人七级) | 2009-06-11 11:57
0

如果参数列表相同仅返回值不同是不允许的,有悖重载的定义;

如果参数列表不同,返回值不同是允许的。

winzheng | 园豆:8797 (大侠五级) | 2009-06-11 11:57
0

把返回值定义为object就可以了啊

zhdw | 园豆:0 (初学一级) | 2009-06-11 12:26
0

如果是基本数据类型 可以使用 Object 做为返回类型

地狱天使 | 园豆:210 (菜鸟二级) | 2009-06-11 12:32
0

CLR是支持返回值不同的重载的,但是C#、VB.NET等都不支持返回值不同的重载。

麒麟.NET | 园豆:3614 (老鸟四级) | 2009-06-11 13:23
0

重载的定义是方法名相同、参数类型不同,满足此条件即可,对返回值没有规定。

参数类型相同则不能称为重载,所以参数类型相同、但返回值不同的重载是不合法的。

如果期望获得不同的返回,可以考虑使用泛型规定返回值类型:

public T GetMyObject<T>(string Name,int Length)

{

var o=new ……

...

return o as T;

}

斯克迪亚 | 园豆:4124 (老鸟四级) | 2009-06-11 13:52
0

返回值是泛型的,或者 object 都可以.

但是如你的题的话,不可以.

邢少 | 园豆:10926 (专家六级) | 2009-06-11 14:16
0

如 Zhang 提到的:

public int A(int i):

public double A(int i);

当你调用 object o = A(10) 的时候,编译器无法知道你要具体调用的是 int... 还是 double...,因为二者都匹配;正因为这个原因,就像反证法一样,大概就使得楼主说的情形不能成立了。

陛下 | 园豆:3938 (老鸟四级) | 2009-06-11 15:19
0

是不能有不同的返回值的。

dwwwing | 园豆:661 (小虾三级) | 2009-06-12 20:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册