C#使用operator关键字实现操作符重载

使用operator关键字实现操作符重载
C#中,操作符都是一些静态方法,其返回值表示操作结果,其参数是操作数.当我们为一个类创建操作符时,我们称为"重载(OverLoad)"该操作符,与成员方法重载很像.要重载加法操作符(+),应这样写:
public static Fraction operator+(Fraction lhs,Fraction rhs);
将参数取名为lhs和rhs是我的习惯,参数名lhs代表"lefthand side"(左手边),这样可以提醒我第一参数代表操作的左边.类似的,rhs代表"righthand side"(右手边).
C#的操作符号重载语法是在要重载的操作符后写上关键字operator.该关键字是一个方法修饰符.因此要重载加法操作符(+),应写成operator+.

C#可以隐式地将int转换long,并允许显式地将long转换为int.int到long是隐式转换,因为任何int都可以适应long的内存表示.而逆操作,从long到int,必须是显式的(要用强制转换操作符),因为转换可能使信息丢失:
 int myInt = 5;
 long myLong;
 myLong = myInt; //隐式
 myInt = (int) myLong; //显式
对分数可能也需要相同的功能.对于给定的int,可以支持隐式的转换为分数,因为整数值等于值除以1(如 15= =15/1).
对于给定分数,可以提供显式转换为整数,只要允许值可以取整.因此,9/4可以转换为整数值2.
提示:关键字implicit用于转换肯定成功,不会丢失信息的时候;否则就用explicit.
public static implicit operator Fraction(int theInt){
 return new Fraction(theInt);
}

public static explicit operator int(Fraction theFraction){
 return theFraction.numerator/theFraction.denominator;
}

转换操作符号后是等于操作符(==)和不等于操作符(!=).请记住,如果实现了其中一个,必须实现另一个.
public static bool operator ==(Fraction lhs,Fraction rhs){
 Console.WriteLine("In operator ==");
    if (lhs.denominator == rhs.denominator && lhs.numerator == rhs.numerator)
  return true;
    return false;
}

public static bool operator !=(Fraction lsh,Fraction rhs){
 Console.WriteLine("In operator !=");
  return !(lhs == rhs);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值