当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.