C#自定义类型强制转换实例分析
本文实例讲述了C#自定义类型强制转换的用法。分享给大家供大家参考。具体分析如下:
先来举一个小例子
类定义:
publicclassMyCurrency
{
publicuintDollars;
publicushortCents;
publicMyCurrency(uintdollars,ushortcents)
{
this.Dollars=dollars;
this.Cents=cents;
}
publicoverridestringToString()
{
returnstring.Format(
"${0}.{1}",Dollars,Cents
);
}
//提供MyCurrency到float的隐式转换
publicstaticimplicitoperatorfloat(MyCurrencyvalue)
{
returnvalue.Dollars+(value.Cents/100.0f);
}
//把float转换为MyCurrency,不能保证转换肯定成功,因为float可以
//存储负值,而MyCurrency只能存储正数
//float存储的数量级比uint大的多,如果float包含一个比unit大的值,
//将会得到意想不到的结果,所以必须定义为显式转换
//float到MyCurrency的显示转换
publicstaticexplicitoperatorMyCurrency(floatvalue)
{
//checked必须加在此处,加在调用函数外面是不会报错的,
//因为溢出的异常是在强制转换运算符的代码中发生的
//Convert.ToUInt16是为了防止丢失精度
//该段内容很重要,详细参考"C#高级编程(中文第七版)218页说明"
checked
{
uintdollars=(uint)value;
ushortcents=Convert.ToUInt16((value-dollars)*100);
returnnewMyCurrency(dollars,cents);
}
}
}
测试代码:
privatevoidbtn_测试自定义类型强制转换_Click(objectsender,EventArgse)
{
MyCurrencytmp=newMyCurrency(10,20);
//调用MyCurrency到float的隐式转换
floatfTmp=tmp;
MessageBox.Show(fTmp.ToString());
floatfTmp2=200.30f;
//调用float到MyCurrency的显示转换
MyCurrencytmp2=(MyCurrency)fTmp2;
MessageBox.Show(tmp2.ToString());
}
希望本文所述对大家的C#程序设计有所帮助。