隐式转换和显式转换运算符

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;

它将生成编译错误。