C# 重載轉換運算符
除了重載上述數學運算符外,還可以定義類型之間的隱式和顯式轉換。如果要在不相關的類型之間轉換,例如類型之間沒有繼承關系,也沒有共享接口,就必須這么做。
下面定義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屬性中。
點擊加載更多評論>>