当B可以打印到A时,如何将A转换为A类对象?
基本上我想这样做。 aa会导致错误的强制转换exception。
注意:o可以是任何东西。 它可能不是B,它可以是C,D,E,F等。但是只要o是一个可以类型转换为A的类(B就是这样一个类,它就可以使用隐式运算符重载)。
var b = (B)"sz"; var a = (A)b; object o = b; var aa = (A)o;
你尝试过以下吗?
[...] var ee = (A)(B)o;
这将起作用的原因,而你的代码不是这样的显式转换是静态编译的。 换句话说,当你说(A)o
编译器寻找从对象到A
的显式转换而没有找到一个。 但是,它确实确定A
是对象的子类,因此强制转换在运行时可能是可行的 – 并且它会尝试将运行时向下转换为A
类型的字段。 此类运行时强制转换与显式和/或隐式转换无关; 这些只是遵循内置类型层次结构规则。
另一个例子:
object o = 1.0; int i = (int)o; //throws InvalidCastException - even though (int)1.0 is OK.