zoukankan      html  css  js  c++  java
  • 转换操作符方法(非基元类型转换)

    当源类型与目标类型不是基元类型时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之后,指定对象要装换成什么类型,圆括号里指定要从什么类型装换。 

  • 相关阅读:
    [bbk5177]第62集第6章 用scheduler自动化 10(章节标题内容调整)
    [bbk4956]第65集 第7章 数据库的维护 02
    [bbk4940]第61集第6章 用scheduler自动化 09
    [bbk5179]第66集 第7章 数据库的维护 03
    ORA01031: insufficient privileges(有待于二次解决)
    Google Analytics功能篇 如何跟踪邮件打开率与点击率
    小资之豆浆篇 (IS2120@BG57IV3)
    wix custom action 之 vbscript 简明步骤(IS2120@BG57IV3)
    c++ faq (15)
    linux 下面字符串处理函数实现 抄来看一下 抄自[http://blog.csdn.net/BeWithLei/article/details/1719242]
  • 原文地址:https://www.cnblogs.com/lanrenqilanming/p/6289770.html
Copyright © 2011-2022 走看看