当前位置:  编程技术>.net/c#/asp.net

C#学习笔记之用户定义类(或结构)的类型转换

    来源: 互联网  发布时间:2014-08-30

    本文导语:  1,自己定义的数据类型,需要做某些工作才能支持在自己的数据类型之间进行类型转换,有些像运算符的重载。即用户定义的数据类型的转换。 2,两个原则 ①,如果某个类直接或间接继承了另一个类,就不能定义这两个类之...

1,自己定义的数据类型,需要做某些工作才能支持在自己的数据类型之间进行类型转换,有些像运算符的重载。即用户定义的数据类型的转换。

2,两个原则
①,如果某个类直接或间接继承了另一个类,就不能定义这两个类之间的数据类型转换
②,数据类型转换必须在源或目标数据类型的内部定义

3,如果数据类型转换声明为隐式的,编译器就可以隐式或显式地使用这个转换,如果声明为显式,就只能显式的使用它。
例子,
 

代码示例:
    //员工薪金类,计算记录薪金的整数部分和小数部分 
    struct Currency 
    { 
        public uint Dollars; 
        public ushort Cents; 
        public Currency(uint dollars, ushort cents) 
        { 
            this.Dollars = dollars; 
            this.Cents = cents; 
        } 
     
        public override string ToString() 
        { 
            return string.Format("${0}.{1,-2:00}", Dollars, Cents); 
        } 
     
        //定义隐式的类型转换 Currency -> float 
        public static implicit operator float(Currency value) 
        { 
            return value.Dollars + (value.Cents / 100.0f); 
        } 
     
        //定义显示的类型转换 float -> Currency 
        public static explicit operator Currency(float value) 
        { 
            uint dollars = (uint)value; 
            /*
             * Convert方式虽然能保证转化为ushort的过程中没有位数损失,但是性能会有损失
             * 关于float->ushort的转化,假设0.35这样一个小数, 
             * 作为二进制只能存储为一个略小于0.35的值,
             * 所以再乘以100并转换为ushort的时候会得到一个比35小的数34,
             * 但并不是所有float型小数都是这样的,
             * Console.WriteLine((ushort)(0.35f * 100));
             * 这里为了防止这一问题使用Convert提供的数字转换方法
             */ 
            ushort cents = Convert.ToUInt16((value - dollars) * 100); 
            return new Currency(dollars, cents); 
        } 
     
    } 
     
    class Program 
    { 
        static void Main(string[] args) 
        { 
            //因为定义了Currency -> float的隐士类型转化,所以可以编译通过 
            Currency balance = new Currency(100, 50); 
           float f = balance; 
     
            //定义了 float -> Currency的显示类型转化,所以也没有问题 
            float amount1 = 100.50f; 
           Currency c1 = (Currency)amount1; 
     
            //没有定义 float -> Currency的隐式类型转化,所以编译问题 
            float amount2 = 100.50f; 
           Currency c2 = amount2;             
     
            Console.Read(); 
        } 
    }

  希望以上有关c#用户定义类(或结构)的类型转换的介绍,对大家有所帮助,祝大家学习进步。


    
 
 

您可能感兴趣的文章:

  • C#学习笔记之C#的虚方法
  • C#学习笔记之C#中的类
  • C#学习笔记之C#类的初始化
  • C#.NET学习笔记5 C#中的条件编译
  • C#学习笔记之C#接口的索引器
  • C#学习笔记之C#只读字段
  • C# 全局变量的学习小结
  • c# 常量与字段学习
  • C#学习笔记之抽象类和抽象函数
  • c# MD5加密的代码(简单示例,仅供学习参考)
  • C# 泛型数组学习小结
  • C#学习笔记之C#结构
  • 实例学习C#中Ref,Out的用法
  • C#学习笔记之扩展方法
  • C#学习笔记之继承
  • C#类的学习笔记之C#构造函数
  • c#进度条ProgressBar学习笔记
  • C# 泛型数组实例学习与总结
  • 实例学习C#中is与As运算符号的用法
  • c# 类型构造器学习
  • Sql学习第一天——SQL 将变量定义为Table类型(虚拟表)
  • CSS学习笔记Padding 属性中参数的定义与使用
  • 学习 SQL Server 的三种自定义函数
  • C#学习笔记之定义类的属性
  • JAVA/JSP学习系列之七(Orion下自定义Tag)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • PHP学习笔记之字符串编码的转换和判断
  • SQL学习笔记七函数 数字,日期,类型转换,空值处理,case
  • 学习内核(赵博分析的那一版本)时,不理解empty_dir(namei.c中)指针转换,请高手指点
  • PHP介绍及学习网站推荐
  • 想深入学习Java应该学习哪些东西
  • 准备学习docker: docker version命令查看版本
  • 新手提问:学习c++同时也想学习unix和linux
  • HTML 学习总结及下一步学习教程推荐
  • 学习c后,学习pb,大家提点建议,谢谢哦
  • OpenStack相关学习资料搜集
  • 有最近开始学习Minix的吗?一起来学习吧
  • juqery的python实现:pyquery学习使用教程
  • 我想问问哪里有AIX下啊!~版本越新越好!~我想拿来学习学习
  • 想找共同学习Linux的新手,一起学习,共同成长
  • 学习java好 还是学习嵌入式开发好??
  • 学习linux网络编程需要学习些内核知识吗?
  • 我想学习linux桌面编程,那么有没有必要学习linux的内核以及内核的相关编程呢?
  • 从Delphi开始学习Java,如何学习Java.欢迎大家的光临!
  • 请问学习JAVABEANS是不是就是学习java.beans.*类库??
  • 谁有 电子版 mastering ejb 2e 多谢!!及学习EJB 集合什么实例学习比较快一点?
  • 我想学习Unix,请高手给个下载网址,用linux来学习Unix差别大吗?
  • 你们学习Linux是学习什么的?
  • 我想问一个大家,我现在刚学习LINUX,我想问一下在LINUX学习哪些知识有前途???
  • unix下C++代码中如何进行数据库操作?给个完整代码学习学习


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3