C#隐式强制转换和显式强制转换运算符
示例
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;
它将产生一个编译错误。
热门推荐
1 如何训练狗狗不叫
2 训练狗狗不叫
3 训练狗狗随行
4 怎么训练狗狗不叫
7 训练比熊狗狗教程
10 上海狗狗训练
11 怎么训练狗狗上厕所
12 训练狗狗趴下
13 狗狗服从训练
14 训练狗狗拒食
15 训练狗狗笑
16 训练狗狗大便
17 训练狗狗立
18 训练狗狗捡东西