+C#不正面支持返回值重载。不过操作符重载中,可以看到返回值重载的使用。 比如下面的例子,从il代码可以看出两个方法声明除了返回值以外完全一样。具体调用哪个取决于返回值:public class A { public static implicit operator int(A a) { return 0; } public static implicit operator string(A a) { return ""; } // .method public hidebysig specialname static int32 op_Implicit(class A a) cil managed // .method public hidebysig specialname static string op_Implicit(class A a) cil managed } public class Test { static void Main() { A a = new A(); int i = a; //<--返回值重载 string s = a; //<--返回值重载 } }
Area();
这时候不能确定返回值类型,也就是说不能确定调用的是哪个方法,所以不能重载
真的很想删除。不过这些言论并没有违反csdn社区用户行为准则,因此无法删除。或许发帖的人不过就是想骗一点分,而骗分的目的是为了下载资源,其实专家分没有这个用途……导致csdn现在灌水严重,充斥各种垃圾回复。版主能做的只能不断科普和纠正那些错误的观点。
比如下面的例子,从il代码可以看出两个方法声明除了返回值以外完全一样。具体调用哪个取决于返回值:public class A
{
public static implicit operator int(A a) { return 0; }
public static implicit operator string(A a) { return ""; }
// .method public hidebysig specialname static int32 op_Implicit(class A a) cil managed
// .method public hidebysig specialname static string op_Implicit(class A a) cil managed
}
public class Test
{
static void Main()
{
A a = new A();
int i = a; //<--返回值重载
string s = a; //<--返回值重载
}
}
a.方法名一定要相同。
b.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体。
1.如果参数个数不同,就不管它的参数类型了;
2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同。
c.方法的返回类型、修饰符可以相同,也可不同。
也就是说
double Area()int Area()
不是重载,方法的重载跟返回值与修饰符关系。
二.操作符的重载
C#中,操作符重载总是在类中进行声明,并且通过调用类的成员方法来实现。
代码参考:14L的一元操作符重载。
半夜睡不着,看帖子 ... ...
using System;public class MyMath
{
long Subtract( )
{ }
int Subtract( )
{ }
}至于其他面向对象语言,自己去测