c# - 将父类(super class)转换为子类

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

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

为什么我无法将父类(super class)转换为子类?我该如何解决这个问题?

最佳答案

Why am I unable to cast

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

使用

var castedSomeSubClass = (MySubClass)someSubClass;

MySubClass castedSomeSubClass = (MySubClass)someSubClass;

关于c# - 将父类(super class)转换为子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55921443/

相关文章:

c# - 在 C# 中转换问题

ios - Swift:使用符合协议(protocol)的实例完成闭包

c++ - C++中的继承(父类和子类)

c# - 实现定义基类属性的接口(interface)时,为什么实现接口(interface)的类不能返回派生类类型的对象?

c# - 如何从 privatefontcollection 内存中渲染字体到可编辑控件

c# - lambda 相当于 collection.Count(predicate)

java - 将对象转换到列表会导致未检查的转换警告

C# 如何获得操作系统架构(x86 或 x64)?

java - 无法使用 mockneat 将 MockUnit 转换为 String

c++ - 为什么我们需要 C++ 中的虚函数?