必知必会的设计原则——里氏替换原则
设计原则系列文章
- 必知必会的设计原则——单一职责原则
- 必知必会的设计原则——开放封闭原则
- 必知必会的设计原则——依赖倒置原则
- 必知必会的设计原则——里氏替换原则
- 必知必会的设计原则——接口隔离原则
- 必知必会的设计原则——迪米特原则
- 必知必会的设计原则——合成复用原则
概述
如果S(子类)是T(父类)的子类型,则T(父类)类型的对象可以替换为S(子类)类型的对象。
所有引用父类对象的地方,都可以使用子类类型代替。
子类可以替换父类。
里氏替换代码
public class Person { public string ? Name { get; set; } } public class Student : Person { public int Id { get; set; } } public class Teacher : Person { public int Number { get; set; } }
// 父类只有自己的成员,无法拥有子类的成员 Person p=new Person(); p.Name = "ren"; //子类继承了父类,不仅有自己的成员,而且也拥有了父类的成员 Student student=new Student(); student.Name = "xuesheng"; student.Id = 1; Teacher teacher=new Teacher(); teacher.Name = "教师"; teacher.Number = 2; Person pStudent = new Student(); pStudent.Name = "父类变量接收了子类对象"; //编译不通过,因为父类必须强转为子类,也就是说将pStudent强制转换为Student类型 //Student s = pStudent; Student s = (Student)pStudent; s.Name = ""; s.Id = 2; // 也可以用as做为转换,转换不成功时返回null,is用来判断是否转换成功,成功则为true,失败则为false Student? ss = p as Student; if (p is Student) { ... } else { ... }
总结
里氏替换原则日常编程大家肯定用,也特别简单。但我们会发现在编程中还是有同学会违反里氏替换原则,最后造成的后果写的代码出问题的几率将会大大增加。
作者:realyrare
出处:https://www.cnblogs.com/mhg215/
声援博主:如果您觉得文章对您有帮助,请点击文章末尾的【关注我】吧!
别忘记点击文章右下角的【推荐】支持一波。~~~///(^v^)\\\~~~ .
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您有其他问题,也欢迎关注我下方的公众号,可以联系我一起交流切磋!