将超类投射到子类中

问题描述 投票:1回答:1

我有一个类看起来像:

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# casting polymorphism subclass superclass
1个回答
4
投票

为什么我无法施放

你可以施放,但是然后你将它分配回MySuperClass someSubClass,它隐含地将它转回MySuperClass

使用

var castedSomeSubClass = (MySubClass)someSubClass;

要么

MySubClass castedSomeSubClass = (MySubClass)someSubClass;
© www.soinside.com 2019 - 2024. All rights reserved.