Operator Overloading

C#中操作符都是一些静态方法,其返回值表示操作结果,其参数是操作数. 当要为一个类创建操作符时,称之为重载(overload)该操作符,比如要重载操作符"+",应该写成:

public static Fraction operator+(Fraction lop, Fraction rop)

 

如果重载了==操作符,必须同时重载不等于!=.(编译器还希望重定义GetHashCode,否则会有警告). 同样<,>,<=,>=这几个操作符也必须成对定义.

 

隐式转换,显式转换

 

隐式转换不会丢失信息,而显式转换则可能导致信息的丢失,比如将long型数据转换成int型等等...

 

对我们自己定义的类型的数据是如何实现转换的呢?

同样分隐式转换和显式转换,当转换肯定成功且不会丢失信息时,加上前缀的关键字implicit,否则就加上关键字 explicit.

看下面的例子

上面代码中需要注意的是两个转换操作符的声明,第一个转换操作符将int转换为fraction:

 public static implicit operator Fraction(int theInt)
    {
        Console.WriteLine("In implicit conversion to Fraction");
        return new Fraction(theInt);
    }

 这个转换是被标记为implicit的,因为从整数到分数,只需要把分母设为1,分子设为该整数就可以转换为分数,不会造成任何截断.

 

第二个转换操作符用于fraction到int的显式转换:

public static explicit operator int(Fraction theFraction)
        {
            Console.WriteLine("In explicit conversion to int");
            return theFraction.numerator /
            theFraction.denominator;
        }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值