当前位置: 首页 > 知识库问答 >
问题:

将继承类的对象强制转换为继承类型的实例

隆钊
2023-03-14

我有下面的代码。

class Program
{
    static void Main(string[] args)
    {
        Outer outer = new Outer();
        Inner inner = new Inner();

        Outer outer2 = new Inner();
        Inner inner2 = new Outer();
    }
}
public class Outer { }
public class Inner : Outer { }

我得到编译器错误时,分配new外()inner2,因为它的类型。我知道这是与继承,但我不知道为什么,因为内容是相同的。此外,我如何强制将其转换为

我试过了

(inner)new Outer();
new Outer() as Inner;

但是它在前者中抛出了一个关于转换的异常,在后者中变成了null。不知道去谷歌上找什么。我的意思是像这样,但完全相反。

共有1个答案

闾丘玮
2023-03-14

子类的类型是基类,但不是相反。考虑将它们重命名为

class Dog {}
class GermanShepard : Dog {}

这清楚地表明,德国牧羊犬肯定是一只狗。但是狗不一定是德国牧羊犬。

写以下内容是不可能的,因为新的狗最终可能是另一种狗。

GermanShepard fred = new Dog();  //error!!

它可能是西施犬或拉布拉多犬。但是你总是可以将德国牧羊犬扔给狗。同样,您始终可以将拉布拉多犬投射到狗身上。

 类似资料:
  • 问题内容: 是否有理由要声明类声明object? 我刚刚找到了执行此操作的代码,但找不到很好的理由。 问题答案: 是否有理由要声明类声明object? 在Python 3中,除了Python 2和3之间的兼容性之外,没有任何理由。在Python 2中,原因很多。 Python 2.x故事: 在Python 2.x(从2.2开始)中,有两种类型的类,取决于是否存在object作为基类的类: “经典”

  • 本文向大家介绍js对象继承之原型链继承实例,包括了js对象继承之原型链继承实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js对象继承之原型链继承的用法。分享给大家供大家参考。具体分析如下: 其它说明:kitty也是有构造方法的,即new Object()。Object默认也有一些方法和属性,见javascript手册中的 "object对象"。同时,它也有原型,只是为空而已 { }。

  • 问题内容: 我想知道如何将某些函数返回的父对象转换为子类。 我不能更改A类。如果可以的话,我可以对A类实现functionIneed,但是由于代码的结构,这是不可能的。 问题答案: Python不支持“广播”。您将需要编写代码,以便它可以适当地进行初始化。

  • 1、定义类的继承 说到继承,你一定会联想到继承你老爸的家产之类的。 类的继承也是一样。 比如有一个旧类,是可以算平均数的。然后这时候有一个新类,也要用到算平均数,那么这时候我们就可以使用继承的方式。新类继承旧类,这样子新类也就有这个功能了。 通常情况下,我们叫旧类为父类,新类为子类。 首先我们来看下类的继承的基本语法: class ClassName(BaseClassName): <st

  • 本文向大家介绍JavaScript中的继承之类继承,包括了JavaScript中的继承之类继承的使用技巧和注意事项,需要的朋友参考一下 继承简介       在JS中继承是一个非常复杂的话题,比其他任何面向对象语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。在JS中想要达到继承公用成员的目的,需要采取一系列措施。JS属于原型式继承,得益于这种灵活性,我们既可以

  • 问题内容: 所有自定义类/对象的超类是否隐式继承?我以为Java不支持多重继承。我问的原因是,如果我已经从我的自定义类中的另一个类继承了,并且Java再次在它之上强制隐式继承,这不是多重继承吗? 另外,java.lang.class类还是所有自定义类/对象的超类吗?如果没有,如何在Java反射中获取传递的任何类的类类型,或如何在任何对象上调用isInstance? 问题答案: 一切都是对象,说您可