关于方法重载问题

1.C#中的方法如果在返回类型、参数类型和参数个数和参数顺序上有所不同,则认为是不同的方法。但定义重载方法时,如果重载方法只是返回类型不同,则在编译时编译会给给程序出错信息。
例如:定义如下两种方法:
 public void print(int)
{
//........
}
public int print(int)
{
/........
}
此时如果有下面的方法调用语句:
实例名.print(5);
则在编译程序时,编译器将无法识别调用哪一个重载方法,因而对于定义重载方法来说,仅仅返回类型不同是不够的。
由此可知:区别重载方法的唯一特征是参数表,重载方法的参数表必须在参数类型、参数个数或参数顺序上有所不同。
2.要避免由于参数类型的相似,而引起的调用重载方法时对用户产生的歧义性问题。
 例如,对于下面定义的两个重载方法:
public int print(int)
{
//........
}
public uint print(uint)
{
//.....
}
它们的参数类型分别为int型和uint型,它们在C#中是不同的数据类型,因而这两个方法是合法的重载方法。但是由于int和uint这两种数据类型所定义数据的范围存在交集,所以在调用print方法时,对用户而言就有可能产生歧义性问题:
例如下面的方法调用语句:
实例名.print(10)
在编译器编译语句时,用户不能确定调用哪个重载方法,因为10既可以理解为int型,也可以理解为uint型。碰到这种情况时,为了准确起见,用户可以显式地给出实参的数据类型,最简单的方法是使用强制类型转换,如下所示:
实例名.print((int)10);//调用print(int)方法
实例名.print((uint)10);//调用print(uint)方法
这样就不会产生由于形参类型的相似而引起的歧义性问题。
3.对于同名的重载方法,程序员应努力保证让其执行相同的功能。如果定义了几个重载方法,它们的功能却不相同,如定义一个print()方法,却让其执行计算价乘的功能,此时重载就失去了意义,并且还会损坏程序的可读性。

转载于:https://www.cnblogs.com/cslixiaomin/archive/2009/09/09/1563363.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值