C#允许用户定义的类型通过使用explicitandimplicit关键字来控制分配和转换。方法的签名采用以下形式:
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; // 隐式强制转换,注意缺少类型 bool[] pixels = (bool[])binaryImage; // 显式强制转换,定义类型
强制转换运算符可以同时使用两种方式,从您的类型到您的类型:
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关键字,它可以参与式层次结构中铸造,是不是在这种情况下有效。即使定义了anexplicit或implicitcast,您也无法执行以下操作:
ColorImage cm = myBinaryImage as ColorImage;
它将产生一个编译错误。