C#自定义类型强制转换实例分析

本文实例讲述了C#自定义类型强制转换的用法。分享给大家供大家参考。具体分析如下:

先来举一个小例子

类定义:

public class MyCurrency
{
  public uint Dollars;
  public ushort Cents;
  public MyCurrency(uint dollars, ushort cents)
  {
    this.Dollars = dollars;
    this.Cents = cents;
  }
  public override string ToString()
  {
    return string.Format(
      "${0}.{1}", Dollars, Cents
    );
  }
  //提供MyCurrency到float的隐式转换
  public static implicit operator float(MyCurrency value)
  {
    return value.Dollars + (value.Cents / 100.0f);
  }
  //把float转换为MyCurrency,不能保证转换肯定成功,因为float可以
  //存储负值,而MyCurrency只能存储正数
  //float存储的数量级比uint大的多,如果float包含一个比unit大的值,
  //将会得到意想不到的结果,所以必须定义为显式转换
  //float到MyCurrency的显示转换
  public static explicit operator MyCurrency(float value)
  {
    //checked必须加在此处,加在调用函数外面是不会报错的,
    //因为溢出的异常是在强制转换运算符的代码中发生的
    //Convert.ToUInt16是为了防止丢失精度
    //该段内容很重要,详细参考"C#高级编程(中文第七版) 218页说明"
    checked
    {
      uint dollars = (uint)value;
      ushort cents = Convert.ToUInt16((value - dollars) * 100);
      return new MyCurrency(dollars, cents);
    }
  }
}

测试代码:

private void btn_测试自定义类型强制转换_Click(object sender, EventArgs e)
{
  MyCurrency tmp = new MyCurrency(10, 20);
  //调用MyCurrency到float的隐式转换
  float fTmp = tmp;
  MessageBox.Show(fTmp.ToString());
  float fTmp2 = 200.30f;
  //调用float到MyCurrency的显示转换
  MyCurrency tmp2 = (MyCurrency)fTmp2;
  MessageBox.Show(tmp2.ToString());
}

希望本文所述对大家的C#程序设计有所帮助。

(0)

相关推荐

  • C#强制转换和尝试转换的方法

    本文实例为大家分享了C#强制转换和尝试转换的方法,供大家参考,具体内容如下 将String[]类型的Object类型,转换为String[]类型: public string ObjectToString(object ob) { string str = string.Empty; if (ob is string[]) { string[] strList = (string[])ob; } return str; } 使用 is 进行判断 ob 是否为 string[] 类型. 将 str

  • C#自定义类型强制转换实例分析

    本文实例讲述了C#自定义类型强制转换的用法.分享给大家供大家参考.具体分析如下: 先来举一个小例子 类定义: public class MyCurrency { public uint Dollars; public ushort Cents; public MyCurrency(uint dollars, ushort cents) { this.Dollars = dollars; this.Cents = cents; } public override string ToString()

  • C语言中自动隐式转换与类型强制转换实例分析

    本文通过一个C程序实例对C语言中自动隐式转换与类型强制转换的注意点进行深入分析,详情如下: 先看一个C程序: #include<stdlib.h> #include<stdio.h> #include<conio.h> double proc(int q){ int n; double sum,t;//本例的关键就在这几个变量的类型上 sum = 2.0; while(sum<=q){ t=sum; //sum = sum+(n+1)/n;//自动隐式转换 sum

  • C++中Operator类型强制转换成员函数解析

    类型转换操作符(type conversion operator)是一种特殊的类成员函数,它定义将类类型值转变为其他类型值的转换.转换操作符在类定义体内声明,在保留字 operator 之后跟着转换的目标类型.转换函数又称类型强制转换成员函数,它是类中的一个非静态成员函数.它的定义格式如下: 复制代码 代码如下: class <类型说明符1> { public: operator <类型说明符2>(); - } 这个转换函数定义了由<类型说明符1>到<类型说明符2

  • C/C++ ip地址与int类型的转换实例详解

    C/C++ ip地址与int类型的转换实例详解 前言 最近看道一个面试题目,大体意思就是将ip地址,例如"192.168.1.116"转换成int类型,同时还能在转换回去 思路 ip地址转int类型,例如ip为"192.168.1.116",相当于"."将ip地址分为了4部分,各部分对应的权值为256^3, 256^2, 256, 1,相成即可 int类型转ip地址,思路类似,除以权值即可,但是有部分字符串的操作 实现代码 #include &l

  • Python温度转换实例分析

    本文主要研究的是Python语言实现温度转换的相关实例,具体如下. 代码如下: #TempConvert.py val=input("请输入带有温度表示符号的温度值(例如:32c)") if val[-1] in ["C","c"]: f=1.8*float(val[0:-1])+32 print("转换后的温度为:%.2fF"%f) elif val[-1] in ["F","f"]:

  • JS返回只包含数字类型的数组实例分析

    本文实例分析了JS返回只包含数字类型的数组实现方法.分享给大家供大家参考,具体如下: 实现效果如:js123ldka78sdasfgr653 => [123,78,653] 一般做法 分析: 1.循环字符串每个字符,是数字的挑出来拼接在一起,不是数字的,就给他空的拼个逗号 2.将新字符串每一位转换为数组,再次遍历,存在的挑出来,即得到结果 var str="js123ldka78sdasfgr653"; var new_str=""; var arr=[];

  • C#编程实现对象与JSON串互相转换实例分析

    本文实例分析了C#编程实现对象与JSON串互相转换的方法.分享给大家供大家参考,具体如下: DoNet2.0 需要借助于Newtonsoft.Json.dll 代码如下: using System; using System.IO; using System.Text; using Newtonsoft.Json; namespace OfflineAcceptControl.UCTools { public class JsonTools { // 从一个对象信息生成Json串 public

  • python类型强制转换long to int的代码

    python2.4版本以后,如果int的值超出范围不会溢出,而是内部转换为long,在网上没有找到从long型强制转换成int的代码,这里所说的int取值范围是和java里一致,即用四个字节表示.自己写了一个函数,勉强可以用,供大家参考. 复制代码 代码如下: import sysdef LongToInt(value):    assert isinstance(value, (int, long))    return int(value & sys.maxint) 经过测试,在32位和64

  • python数据类型强制转换实例详解

    1.字符强转一切 如果是字符串进行强制转换, 仅仅就是在原数据类型的两边套上引号 2.list : 强制转换成列表 """ 如果是字符串,会把每一个字符都单独作为一个元素放到新的列表中 如果是字典,只保留键,形成一套新的列表. 如果是其他容器,只是单纯的在原数据的两边套上[] """ res = list(tuplevar) res = list(setvar) res = list(strvar) res = list(dictvar) # 把

  • python常见数制转换实例分析

    本文实例讲述了python常见数制转换用法.分享给大家供大家参考.具体分析如下: 1.进位制度 Python中二进制是以0b开头的: 例如: 0b11 则表示十进制的3 8进制是以0开头的: 例如: 011则表示十进制的9 16进制是以0x开头的: 例如: 0x11则表示十进制的17 或者写成  \x  \b 2.各种函数转换 #10进制转为2进制 >>> bin(10) '0b1010' #2进制转为10进制 >>> int("1001",2) 9

随机推荐