将 Super Class 转换为 Sub Class

Casting a Super Class in to a Sub Class

我有一个 class 看起来像:

public class MySuperClass
{
  public void PrintValue()
  {
    print("SUPER Class");
  }
}

然后我有另一个 class 看起来像:

public class MySubClass : MySuperClass
{
  public void PrintSubValue()
  {
    print("SUB Class");
  }
}

然后,我有第三个 class 看起来像这样的情况:

public class MyOtherClass
{
  public MyOtherClass(MySuperClass someSubClass)
  {
    someSubClass.PrintSubValue();
  }
}

它不会编译...正如预期的那样。

现在,如果我将 MyOtherClass 更改为:

public class MyOtherClass
{
  public MyOtherClass(MySuperClass someSubClass)
  {
    someSubClass = (MySubClass) someSubClass;
    someSubClass.PrintSubValue();
  }
}

还是编译不出来...这个我没想到

为什么我无法将 Super Class 投射到 Sub Class?我该如何解决这个问题?

Why am I unable to cast

您可以进行转换,但随后将其分配回 MySuperClass someSubClass,这会隐式地将其转换回 MySuperClass

使用

var castedSomeSubClass = (MySubClass)someSubClass;

MySubClass castedSomeSubClass = (MySubClass)someSubClass;