隱式轉換和顯式轉換運算子

C#允許使用者定義的型別通過使用 explicitimplicit 關鍵字來控制賦值和轉換。該方法的簽名採用以下形式:

public static <implicit/explicit> operator <ResultingType>(<SourceType> myType)

該方法不能再使用任何引數,也不能是例項方法。但是,它可以訪問其中定義的任何型別的私有成員。

implicitexplicit 演員的一個例子:

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 關鍵字,它可以參與式層次結構中轉換,是不是在這種情況下有效。即使在定義了 explicitimplicit 演員之後,你也做不到:

ColorImage cm = myBinaryImage as ColorImage;

它將生成編譯錯誤。