这是 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() // ----
这是一个超级简单的方法:
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 的信息。
这
很容易。 引用(声明的变量,因此左侧)必须是派生类型较少。 右侧的实例可能更派生。