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

Sag*_*gar 3 c#

我有一个基类Base和一个Derived1类,它派生自Base类,另一个派生类Derived2派生自derived1.

下面我提到了几个对象创建的例子(后面是类的多级继承).有人可以帮助我理解那些无法创建对象的情况以及为什么在C#中无法实现对象?

Base b1 = new Base() //Possible 
Base b1 = new derived1() // Possible 
Derived1 d1 = new Base() // Not Possible 
Derived1 d1 = new Derived1() // Possible 
Derived2 d2 = new Derived1() // ---- 
Derived1 d1 = new Derived2() // ---- 
Derived2 d2 = new Derived2() // Possible
Derived2 d2 = new Base() // ---- 
Base b1 = new Derived2() // ---- 
Run Code Online (Sandbox Code Playgroud)

Eri*_*ips 5

这是一个超级简单的方法:

public class A { }
public class B : A { }
public class C : B { }
Run Code Online (Sandbox Code Playgroud)

所以它就像撤消定义一样简单:

A < B < C
Run Code Online (Sandbox Code Playgroud)

(我在这里使用大于号,因为B就是A和A的所有东西.C是B和A的所有东西......等等.)

所以A可以支持A,B和C.B可以支持B和C.最后C只能支持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();
Run Code Online (Sandbox Code Playgroud)

C#不支持任何其他组合(因为Liskov的替换原则).