日期:2014-05-18  浏览次数:21207 次

不同类型,相同名称的方法名能重载吗?
比如

double Area()

int Area()



------解决方案--------------------
好像可以吧,你测试一下就知道了啊。定义这两个函数后编译能通过应该就可以了。
------解决方案--------------------
方法签名包括两部分,方法名和参数列表,方法签名决定了两个方法是否相同。
方法名和参数列表相同的方法就是同一个方法,编译器是无法区分开两个相同的方法的。
------解决方案--------------------
不能重载, 在你调用的时候是这样的
Area();
这时候不能确定返回值类型,也就是说不能确定调用的是哪个方法,所以不能重载
------解决方案--------------------
应该说,允许和不允许只有返回值不同的方法重载各有利弊。

为什么C#不允许这么做,5L和6L说的两种情况是主要原因,隐式转换和无返回值调用会引起混淆,尤其是导致程序出现难以察觉的BUG。同时使得语言变得复杂,我想这是C#设计者不允许这么重载的初衷吧。

但是的确可以在IL层面上这么定义,并且用反射进行调用。这也许是微软希望不把这个路堵死,以便某个基于IL的语言仍然可以启用这样的特性。
------解决方案--------------------
探讨
应该说,允许和不允许只有返回值不同的方法重载各有利弊。
...

------解决方案--------------------
一.方法的重载:
a.方法名一定要相同。   
b.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。   
1.如果参数个数不同,就不管它的参数类型了;   
2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。   
c.方法的返回类型、修饰符可以相同,也可不同。
也就是说

double Area()

int Area()
不是重载,方法的重载跟返回值与修饰符关系。
二.操作符的重载
C#中,操作符重载总是在类中进行声明,并且通过调用类的成员方法来实现。
代码参考:14L的一元操作符重载。
半夜睡不着,看帖子 ... ...