输入强制转换错误和构造函数

Ram*_*Ram 0 .net c# casting static-typing

我有两节课

 public class A
    {
        public A()
        {

        }
    }

    public class B:A
    {
        public B()
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

它的主要代码如下

    A oa = new B();
    B ob = new A();
Run Code Online (Sandbox Code Playgroud)

第1行成功编译,而第2行显示类型转换错误.为什么会这样.什么时候new B()new A()被召唤到底发生了什么?

Blo*_*ard 7

您已声明了一个类型的变量B,然后尝试为其分配一个类型的值A.你已经定义B了一种A,但这并不意味着所有人A都是B.

可以这样想:

class Animal { }
class Dog : Animal { }
class Cat : Animal { }
Run Code Online (Sandbox Code Playgroud)

你可以做Animal rex = new Dog(),因为所有的狗都是动物,但不是Dog fido = new Animal(),因为不是所有的动物都是狗.