里氏替换原则 接口 抽象类型与虚方法

2016-12-09  本文已影响0人  本来想取long但是有人用了

1.虚方法必须有实现部分,并且为派生类提供了重写该方法的选项.

public virtual void Say();   //错误

2.抽象方法没有实现部分,并且抽象方法的派生是一种强迫性的.

继承抽象类就必须实现抽象方法,这与我们virtual是不同的.

3.抽象方法只能在抽象类中进行声明.抽象方法必须在派生类重写.

含有抽象的方法必然是抽象类.也就是说必须强制声明为abstract,

系统不会自动为我们添加.

4.抽象方法必须在派生类重写,这一点和interface类似,虚方法不必.

虚方法和抽象方法的联系:

1.无论是虚方法或者抽象方法,重写必须使用override关键字

抽象类:

在程序中使用关键字abstract

如果说正常类是一个完整的类的话,抽象类实际上是一个不完整的类.

抽象类的特点:

1.如果类中存在抽象方法,那么该方法不可以有实现部分.只能是方法声明.

2.含有抽象方法的类一定是抽象类.

3.抽象类不一定含有抽象方法.

4.如果子类的父类为抽象类并且含有抽象方法的话,子类必须实现重写该抽象方法.

5.virtual和abstract不能使用private修饰符,要使用public修饰符.

6.virtual不能和abstract放在一起用.

7.抽象类不能被实例化.

8.抽象类可以包含静态成员.

抽象类的作用:父类约束子类行为.

接口:接口就是公共契约.

接口的关键字:interface

接口和类属于同级关系,都属于c#中的编程单位.

接口也被称作纯洁的抽象类

接口特点:

1.不能有字段

2.接口内不能有修饰符

3.接口中不能有方法体(方法实现)

4.接口同样不可以被直接实例化

5.接口里面成员总是公共的

6.接口中可以有属性,但是不能有修饰符

7.接口中可以有索引器/事件声明

8.接口中声明的方法,子类实现的时候虽然也用override关键字,但是记住不属于重写.这里不能把

override显示的声明出来.

开发准则:尽量多用接口.

能用接口的不用抽象类,能用抽象类不用虚方法.

动态多态性.

LSP:

*原则上来讲子类对象介意赋给父类对象,也可以说子类替换父类,并且出在父类能够出现

的任何地方.

反过来说,父类对象是不能替换子类对象的,这种特性称为李氏替换原则:

1.子类可以隐式的转换为父类

2.父类必须强转子类

is && as

is :相当于判断. A is B A是不是B或者A是不是B的子类?

as :先判断,在转换.

(它比传统的强制装换要相对来说安全一点,因为传统的强制转换

*一旦转换失败的话程序就崩溃了.那使用as关键字可以保证,程序一样执行,只不过

*转换不成功,就赋一个空类型.)

����xy�%�

上一篇 下一篇

猜你喜欢

热点阅读