C#自定义类型强制转换
来源:互联网 发布:drum烟丝淘宝 编辑:程序博客网 时间:2024/05/17 23:27
举一个小例子
--------------类定义-------------
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#自定义类型强制转换
- C#自定义类型的强制转换
- C#中强制类型转换
- C# Bug --强制类型转换
- C#的强制类型转换
- C++与C#对比:强制类型转换
- C#基础-类型强制转换,拆箱,装箱
- Effective C# Item28:避免强制类型转换
- C# int类型的强制转换整理
- C#自定义结构的强制转换
- C#的类型转换:显示类型转换、强制类型转换、不兼容类型转换
- C#中的自定义类型转换
- 关于强制类型转换:强制类型转换
- 类型转换&&类型强制转换
- 类型转换&&类型强制转换
- C#高级(七)类型强制转换,拆箱,装箱
- C#下的强制类型转换应用分析:()、is、as
- C#中的AS、IS运算符与强制类型转换
- OpenCV运动检测跟踪(blob track)框架组成模块详解
- ORA-01776: cannot modify 和instead of 触发器
- RedrawWindow, UpdateWindow,InvalidateRect 用法
- MFC六大关键技术之(二)——运行时类型识别(RTTI)
- STL学习之路
- C#自定义类型强制转换
- 建立大型电商团队的参考
- 安装程序的静默安装
- 对象使用之前初始化
- Unity 3d Mac IDE出错
- 基于MFC 对话框的OPENGL学习
- Java控制台输入方式总结
- 关于u-boot中的.balignl 16,0xdeadbeef的理解
- Android应用自动更新功能的代码实现