首页 > 解决方案 > 将超类转换为子类

问题描述

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

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();
  }
}

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

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

标签: c#castingpolymorphismsubclasssuperclass

解决方案


为什么我无法投射

您可以进行强制转换,但随后将其分配回MySuperClass someSubClass隐式将其强制转换回MySuperClass.

利用

var castedSomeSubClass = (MySubClass)someSubClass;

或者

MySubClass castedSomeSubClass = (MySubClass)someSubClass;

推荐阅读