Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪一个是C#中的有效对象?_C# - Fatal编程技术网

哪一个是C#中的有效对象?

哪一个是C#中的有效对象?,c#,C#,我有一个基类base和一个派生自基类的类Derived1,还有一个派生自Derived1的派生类Derived2 下面我提到了几个创建对象的案例(接下来是类的多级继承)。有人能帮助我理解在哪些情况下不可能创建对象,以及为什么在C#中不可能创建对象吗 那很容易。引用(已声明的变量,因此位于左侧)的派生类型必须较少。右侧的实例可能更具派生性 派生类拥有关于基类的所有信息,因为继承是一种“is-a”关系 我们有一个基类“base”和一个派生类“derived” 根据继承规则“派生的是一个基”。Base

我有一个基类base和一个派生自基类的类Derived1,还有一个派生自Derived1的派生类Derived2

下面我提到了几个创建对象的案例(接下来是类的多级继承)。有人能帮助我理解在哪些情况下不可能创建对象,以及为什么在C#中不可能创建对象吗


那很容易。引用(已声明的变量,因此位于左侧)的派生类型必须较少。右侧的实例可能更具派生性

派生类拥有关于基类的所有信息,因为继承是一种“is-a”关系

我们有一个基类“base”和一个派生类“derived”

根据继承规则“派生的是一个基”。Base的所有属性都存在于派生的

基b=新的派生()//这是可能的,因为所有有关基地的信息


d=新基础()//这是不可能的,因为base没有关于派生的信息。

这里有一个非常简单的方法:

public class A { }
public class B : A { }
public class C : B { }
因此,这就像颠倒定义一样简单:

A < B < C

C#不支持任何其他组合(因为)。

这称为.Base b=new-Derived();//在dervied类的内存中,我们可以容纳base.Derived d=newbase();//这是不可能的,因为在base的内存中,如果创建了上述类结构,我们无法容纳derived。在这种情况下,将调用哪个类构造函数,为什么?(你能解释一下所有有效和无效的案例吗?)通常我会说,只要问这个问题。然而,由于这个问题是6年前提出的,我将把这个链接放在这里;及;
A < B < C
A z = new A();
A y = new B();  
A x = new C();
B w = new B();
B v = new C();
C u = new C();