c#继承之里氏转换规则

来源:互联网 发布:淘宝直播怎么秒杀 编辑:程序博客网 时间:2024/05/17 03:11

1.在c#中如果一个类没有显示的去继承任何类,那么这个类就继承自object类,
2.object类是所有类的基类
面向对象的继承实际上就是一棵进化树,所有的子类在大类上都属于父类的类别(子类,父类中的“类”都是“类别”的意思)
但子类相对于父类又增加了很多自己的属性和方法。难点在于:为什么子类拥有的“东西”(属性和方法)比父类多,但子类还是属于
父类?貌似传统中内容的包含关系,子类继承父类,子类“有”(注意:“有”但不一定能访问)父类所有的东西,貌似是子类包含父类??!
错误!
因为面向对象的思想是来源于生物进化的,人类的确比猿类多了很多的属性和方法,但猿类仍然是我们的父类~因此可以这样说,只要你是个人,那么
你就一定也是个猿!
区分清楚:类别的进化包含关系和类别中内容的包含关系!

氏转换规则是编译器的一个要求,如果编译器不能支持里氏转换规则,那么这个编译器的设计便不符合要求。

里氏转换规则的具体内容:
1.所有的子类也都是其父类的类别,因此可申明一个父类的变量,来接受其所有的子类
如:
Father fa = new Son(); 这样做是可以的
但是fa即使是个Son对象,但由于其类型限制,只会表现出Father类的属性和方法,
如果想将fa暴漏出Son的属性和方法,可以将其还原。
2.如果父类中装的是子类对象,可以将这个对象转换为子类对象
Son s = fa as Son(转换失败的话,s = null)
或者;
if (s is Son){
}
注意:is的用法:判断对象是否是该类的一个实例,如果是则返回true,否则false
0 0
原创粉丝点击