C#自界說類型強迫轉換實例剖析。本站提示廣大學習愛好者:(C#自界說類型強迫轉換實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是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#法式設計有所贊助。