设计模式六大原则:里氏替换原则
里氏替换原则:
子类应当可以替换父类并出现在父类能够出现的地方。比如:公司搞年度派对,都有员工都可以抽奖,那么不管是新员工还是老员工,也不管是总部员工还是外派员工,都应当可以参加抽奖。
案例:
1 internal class Program 2 { 3 private static void Main(string[] args) 4 { 5 A a = new A(); 6 Console.WriteLine($"100-50={(a.func1(100, 50))}"); 7 8 B b = new B(); 9 Console.WriteLine($"100-50={(b.func1(100, 50))}"); 10 Console.WriteLine($"100-50={(b.func2(100, 50))}"); 11 12 Console.ReadKey(); 13 } 14 } 15 16 internal class A 17 { 18 public int func1(int num1, int num2) 19 { 20 return num1 - num2; 21 } 22 } 23 24 internal class B : A 25 { 26 //public int func1(int num1, int num2) 27 //{ 28 // return num1 + num2; 29 //} 30 31 public int func2(int num1, int num2) 32 { 33 return func1(num1, num2) + 100; 34 } 35 }
由上述代码可以看出,若类B在继承类A时不注意,重写了父类方法func1就会导致结果与预想的不一致,改变了父类原有的功能。故里氏转换原则应满足以下要求:
1、子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法
2、子类可以增加自己特有的方法
3、当子类的方法重载父类的方法时,方法的形参要比父类方法的输入参数更宽松
4、当子类的方法实现父类的抽象方法时,方法的返回值应比父类更严格
优点:
可以大大减少程序的bug以及增强代码的可读性