C#自定义类型强制转换实例分析
程序员文章站
2022-08-03 21:22:45
本文实例讲述了c#自定义类型强制转换的用法。分享给大家供大家参考。具体分析如下:
先来举一个小例子
类定义:
public class mycurrency...
本文实例讲述了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#程序设计有所帮助。