【C#设计模式】里氏替换原则
今天,我们再来学习 SOLID 中的“L”对应的原则:里式替换原则。
里氏替换原则
里氏替换原则(Liskov Substitution Principle):派生类(子类)对象能够替换其基类(超类)对象被使用。通俗一点的理解就是“子类是父类”,举个例子,“男人是人,人不一定是男人”,当需要一个父类类型的对象的时候可以给一个子类类型的对象;当需要一个子类类型对象的时候给一个父类类型对象是不可以的!
里氏替换原则的本质:接口的实现必须满足调用者对接口的所有期望
里氏替换原则 满足逻辑的充分不必要条件。 依赖倒置原则。
典型的应用:
1、把基类作为接口类
2、as 、is
3、隐式转化
/* *这几就是把基类作为接口类 的原理(里氏替换原则) 1.子类可以隐式的转换为父类 2.父类必须强转子类*/ Animal animal =new Animal(); Bird bird=new Bird(); //使用方式一 change(bird); void change(Animal an){ } //使用方式二 Animal animal1=bird as Animal;
里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。它包含以下4层含义:
子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
子类中可以增加自己特有的方法。
当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
违反里氏替换原子
看上去很不可思议,因为我们会发现在自己编程中常常会违反里氏替换原则,程序照样跑的好好的。所以大家都会产生这样的疑问,假如我非要不遵循里氏替换原则会有什么后果?
后果就是:你写的代码出问题的几率将会大大增加。
编程是个人爱好