翼度科技»论坛 编程开发 .net 查看内容

必知必会的设计原则——里氏替换原则

4

主题

4

帖子

12

积分

新手上路

Rank: 1

积分
12
设计原则系列文章

必知必会的设计原则——单一职责原则

必知必会的设计原则——开放封闭原则

必知必会的设计原则——依赖倒置原则

概述

如果S(子类)是T(父类)的子类型,则T(父类)类型的对象可以替换为S(子类)类型的对象。
 所有引用父类对象的地方,都可以使用子类类型代替。
子类可以替换父类。
里氏替换代码
  1. public class Person
  2. {
  3.     public string ? Name { get; set; }
  4. }
  5. public class Student : Person
  6. {
  7.     public int Id { get; set; }
  8. }
  9. public class Teacher : Person
  10. {
  11.     public int Number { get; set; }
  12. }
复制代码
  1. // 父类只有自己的成员,无法拥有子类的成员
  2. Person p=new Person();
  3. p.Name = "ren";
  4. //子类继承了父类,不仅有自己的成员,而且也拥有了父类的成员
  5. Student student=new Student();
  6. student.Name = "xuesheng";
  7. student.Id = 1;
  8. Teacher teacher=new Teacher();
  9. teacher.Name = "教师";
  10. teacher.Number = 2;
  11. Person pStudent = new Student();
  12. pStudent.Name = "父类变量接收了子类对象";
  13. //编译不通过,因为父类必须强转为子类,也就是说将pStudent强制转换为Student类型
  14. //Student s = pStudent;
  15. Student s = (Student)pStudent;
  16. s.Name = "";
  17. s.Id = 2;
  18. // 也可以用as做为转换,转换不成功时返回null,is用来判断是否转换成功,成功则为true,失败则为false
  19. Student? ss = p as Student;
  20. if (p is Student)
  21. {
  22. ...
  23. }
  24. else {
  25. ...
  26. }
复制代码
总结

里氏替换原则日常编程大家肯定用,也特别简单。但我们会发现在编程中还是有同学会违反里氏替换原则,最后造成的后果写的代码出问题的几率将会大大增加。
 

来源:https://www.cnblogs.com/mhg215/archive/2023/02/09/17100894.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具