程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#自界說類型強迫轉換實例剖析

C#自界說類型強迫轉換實例剖析

編輯:C#入門知識

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#法式設計有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved