隱式轉換和顯式轉換運算子
C#允許使用者定義的型別通過使用 explicit
和 implicit
關鍵字來控制賦值和轉換。該方法的簽名採用以下形式:
public static <implicit/explicit> operator <ResultingType>(<SourceType> myType)
該方法不能再使用任何引數,也不能是例項方法。但是,它可以訪問其中定義的任何型別的私有成員。
implicit
和 explicit
演員的一個例子:
public class BinaryImage
{
private bool[] _pixels;
public static implicit operator ColorImage(BinaryImage im)
{
return new ColorImage(im);
}
public static explicit operator bool[](BinaryImage im)
{
return im._pixels;
}
}
允許以下強制轉換語法:
var binaryImage = new BinaryImage();
ColorImage colorImage = binaryImage; // implicit cast, note the lack of type
bool[] pixels = (bool[])binaryImage; // explicit cast, defining the type
轉換運算子可以是雙向的,打算從你的型別,並打算給你的型別:
public class BinaryImage
{
public static explicit operator ColorImage(BinaryImage im)
{
return new ColorImage(im);
}
public static explicit operator BinaryImage(ColorImage cm)
{
return new BinaryImage(cm);
}
}
最後,as
關鍵字,它可以參與式層次結構中轉換,是不是在這種情況下有效。即使在定義了 explicit
或 implicit
演員之後,你也做不到:
ColorImage cm = myBinaryImage as ColorImage;
它將生成編譯錯誤。