转换操作符方法(非基元类型转换)

当源类型与目标类型不是基元类型时CLR便不能自己进行编译转换。

下例为Rational(有理数类型)与string,int的转化。

转换操作符是将对象从一个类型转化成另一个类型的方法。可以使用特殊语法来定义装换操作符方法。

CLR要求转换操作符的重载方法必须是public 和static方法。c#要求参数类型和返回类型二者必有其一与定义转换方法的类型相同。

//定义只有一个参数的公共构造器,这个参数时源类型的一个实例
//定义无参数的公共实例方法ToXxx(l类似于ToSting)
//每个方法都将定义该方法的类型的一个实例装化为Xxx类型
public sealed class Rational
{
    //由一个int构造一个Rational
    public Rational(int num) { }
    //由int隐式构造并返回一个Rational
    public static implicit operator Rational(int num) { return new Rational(num); }
    
   //由一个single构造一个Rational
    public Rational(Single s) { }
    //由Single隐式构造并返回一个Rational
    public static implicit operator Rational(Single num) { return new Rational(num); }
    //将Rational转化成一个int
    public Int32 ToInt32() { return new Int32(); }
    //由一个Rational显示返回一个Int32
    public static explicit operator Int32(Rational r) { return r.ToInt32(); }
    //将Rational转化成一个Single
    public Single ToSingle() { return new Single(); }
    //由一个Rational显示返回一个Single
    public static explicit operator Single(Rational r) { return r.ToSingle(); }

}

  

namespace 类型构造器
{
    class Program
    {
        static void Main(string[] args)
        {
            int a = 5;
            Single b=8;
            Rational rint = new Rational(a);
            Rational bsigle = new Rational(b);
            Rational r1 = 5;//int隐式转化为rational;
            Rational r2 = 3.14f;//single隐式转化为Rational
            Rational r3 = 4;
            Rational r4 = 6;
            Console.WriteLine(rint.GetType());//输出为Rational
            Console.WriteLine(bsigle.GetType());//输出为Rational
            Console.WriteLine(r3.ToInt32().GetType());//输出为System.Int32
            Console.WriteLine(r4.ToSingle().GetType());//输出为System.Single
            Console.ReadKey();
        }
    }
}

 c#中implicit关键字告诉编译器为了生成代码来调用方法,不需要在源代码中进行显式转型,相反explicit告诉编译器只有在发现了显式转型时才调用方法。

implicit和explicit关键字之后指定operator关键字告诉编译器该方法时一个转换操作符。在operator之后,指定对象要装换成什么类型,圆括号里指定要从什么类型装换。 

转载于:https://www.cnblogs.com/lanrenqilanming/p/6289770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值