位置:首頁 > 軟件操作教程 > 編程開發(fā) > C# > 問題詳情

C# 重載轉換運算符

提問人:劉團圓發(fā)布時間:2020-12-07

    除了重載上述數學運算符外,還可以定義類型之間的隱式和顯式轉換。如果要在不相關的類型之間轉換,例如類型之間沒有繼承關系,也沒有共享接口,就必須這么做。

下面定義ConvClassl和ConvClass2之間的隱式轉換,即編寫下列代碼:

    ConvClassl opl = new ConvClassl ();

    ConvClass2 op2 = opl;

另外,可以定義一個顯式轉換:

    ConvClassl opl = new ConvClassl ();

    ConvClass2 op2 = (ConvClass2)opl;

例如,考慮下面的代碼:

public class ConvClassl

{

    public int val;

    public static implicit operator ConvClass2(ConvClassl opl)

    {

        ConvClass2 returnVal = new ConvClass2 (); 

        returnVal.val = opl.val; 

        return returnVal;

public class ConvClass2

{

    public double val;

    public static explicit operator ConvClassl(ConvClass2 opl)

    {

        ConvClassl returnVal = new ConvClassl(); 

        checked {returnVal.val = (int)opl.val;}; 

        return returnVal;

    }

}

其中,ConvClassl包含一個int值,ConvClass2包含一個double值。int值可以隱式轉換為double值,所以可在 ConvClassl和ConvClass2之間定義一個隱式轉換。但反過來就不可行,應把ConvClass2和ConvClassl之間的轉換定義為顯式轉換。


在代碼中,用關鍵字implicit和explicit來指定這些轉換,如上所示。對于這些類,下面的代碼就很好:

    ConvClassl opl = new ConvClassl(); 

    opl.val = 3;

    ConvClass2 op2 = opl;

但反向轉換需要進行下述顯式數據類型轉換:

    ConvClass2 opl = new ConvClass2(); 

    opl.val = 3el5;

    ConvClassl op2 = (ConvClassl)opl;

如果在顯式轉換中使用了checked關鍵字,則上述代碼將產生一個異常,因為opl的val屬性值太大,不能放在op2的val屬性中。

繼續(xù)查找其他問題的答案?

相關視頻回答
回復(0)
返回頂部