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

C# 重載轉(zhuǎn)換運(yùn)算符

提問人:劉團(tuán)圓發(fā)布時(shí)間:2020-12-07

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

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

    ConvClassl opl = new ConvClassl ();

    ConvClass2 op2 = opl;

另外,可以定義一個(gè)顯式轉(zhuǎn)換:

    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包含一個(gè)int值,ConvClass2包含一個(gè)double值。int值可以隱式轉(zhuǎn)換為double值,所以可在 ConvClassl和ConvClass2之間定義一個(gè)隱式轉(zhuǎn)換。但反過來就不可行,應(yīng)把ConvClass2和ConvClassl之間的轉(zhuǎn)換定義為顯式轉(zhuǎn)換。


在代碼中,用關(guān)鍵字implicit和explicit來指定這些轉(zhuǎn)換,如上所示。對(duì)于這些類,下面的代碼就很好:

    ConvClassl opl = new ConvClassl(); 

    opl.val = 3;

    ConvClass2 op2 = opl;

但反向轉(zhuǎn)換需要進(jìn)行下述顯式數(shù)據(jù)類型轉(zhuǎn)換:

    ConvClass2 opl = new ConvClass2(); 

    opl.val = 3el5;

    ConvClassl op2 = (ConvClassl)opl;

如果在顯式轉(zhuǎn)換中使用了checked關(guān)鍵字,則上述代碼將產(chǎn)生一個(gè)異常,因?yàn)閛pl的val屬性值太大,不能放在op2的val屬性中。

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

相關(guān)視頻回答
回復(fù)(0)
返回頂部