将超级类转换为子类

时间:2019-04-30 12:57:18

标签: c# casting polymorphism subclass superclass

我有一个看起来像这样的课

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

然后我有另一个看起来像这样的课:

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

然后,我遇到这样的情况:我的第三堂课看起来像:

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

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

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

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

它仍然无法编译...这没想到。

为什么我无法将超级类强制转换为子类?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:4)

  

我为什么不能投射

您可以进行投射,但是您可以将其分配回MySuperClass someSubClass,这会隐式地将其投射回MySuperClass

使用

var castedSomeSubClass = (MySubClass)someSubClass;

MySubClass castedSomeSubClass = (MySubClass)someSubClass;