Operator Overloading

来源:互联网 发布:js 图片自动旋转 编辑:程序博客网 时间:2024/04/29 13:22

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;
        }

 

原创粉丝点击