给定具有基类B和子类的类层次结构S:
class B { }
class S : B { }
我可以通过隐式转换将 a 分配S给a:B
B b = new S();
如果我想将其降级为 aS我必须明确地这样做:
B b = new S();
...
S s = (S)b;
现在,我的理解是我们可以保证从Sto始终存在赋值兼容性B,因此我们永远不必以以下方式执行显式向上转换:
S s = new S();
B b = (B)s; // or
B b2 = s as B;
这个断言是否正确,或者正如问题所述,我是否必须执行明确的向上转型?