这是 C# 中的有效对象

本文关键字:有效 对象 这是 | 更新日期: 2023-09-27 18:36:43

我有一个基类 Base 和一个派生自基类的类 Derived1 和另一个派生类 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() // ---- 

这是 C# 中的有效对象

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

public class A { }
public class B : A { }
public class C : B { }

因此,只需反转定义即可:

A < B < C

(我在这里使用大于号,因为 B 是 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();

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

派生类具有有关基类的所有信息,因为继承是一种"is-a"关系。

我们有一个基类"Base"和一个派生类"Derived"

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

Base b = new Derived();//可以像 base 的所有信息一样派生。

Dervied d = new Base();//这是不可能的,因为 base 没有关于 derived 的信息。

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