里氏代换原则在c#中可以体现里氏替换原则的关键操作字是什么?只想知道操作字是什么!不要解释一大堆乱七八糟的东西!

里氏代换原则  时间:2021-07-16  阅读:()

里氏代换原则的示例

LSP讲的是基类和子类的关系。

只有当这种关系存在时,里氏代换关系才存在。

如果两个具体的类A,B之间的关系违反了LSP的设计,(假设是从B到A的继承关系)那么根据具体的情况可以在下面的两种重构方案中选择一种。

-----创建一个新的抽象类C,作为两个具体类的超类,将A,B的共同行为移动到C中来解决问题。

-----从B到A的继承关系改为委派关系。

C# 举个例子说说里氏替换原则

里氏代换原则(Liskov Substitution Principle LSP)是面向对象设计的基本原则之一。

里氏代换原则中说,任何基类可以 出现的地方,子类一定可以出现。

LSP是继承复用的基石,只有当子类可以替换掉父类,软件单位的功能不受到影响时,父类才能真正被复用,而子类也能够在 父类的基础上增加新的行为。

里氏代换原则是对“开-闭”原则的补充。

实现“开-闭”原则的关键步骤就是抽象化。

而基类与子类的继承关系就是抽象化的具体实 现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

下面举例说明什么是里代换原则 实例1 正方形不是长方形 在几何当中,正方形肯定是长方形,只不过它是特殊的长方形,四条边都相等,利用面向对象的继承关系,我们让正方形继承长方形,代码如下: // C#讲解里氏代换原则 // 实例名称:正方形不是长方形 using System; // 长方形类 class Rectangle { int length; int width; public int getLength() { return length; } public int getWidth() { return width; } public virtual void setLength(int length) { this.length = length; } public virtual void setWidth(int width) { this.width = width; } } // 正方形类Square class Square : Rectangle { public override void setLength(int length) { base.setLength(length); base.setWidth(length); } public override void setWidth(int width) { base.setLength(width); base.setWidth(width); } } /* * 由于正方形的长度和宽度必须相等,所以在方法setLength和setWidth中, * 对长度和宽度赋值相同。

类TestRectangle是我们的软件系统中的一个组件, * 它有一个resize方法要用到基类Rectangle,resize方法的功能是模拟长方形宽度逐步增长的效果 */ //测试类TestRectangle class TestRectangle { // 此方法改变长方形的宽,将宽设为比高大 static void resize(Rectangle objRect) { Console.WriteLine("设置宽度开始"); while(objRect.getWidth() <= objRect.getLength() ) { objRect.setWidth( objRect.getWidth () + 1 ); } Console.WriteLine("设置宽度结束"); } static void Main() { // 实例化一个长方形 Rectangle r=new Rectangle(); // 设长为10 r.setLength(10); // 设宽为1 r.setWidth(1); Console.WriteLine("长方形"); Console.WriteLine("改变之前长为:"+r.getLength()); Console.WriteLine("改变之前宽为:"+r.getWidth()); // 调用方法改变长方形的宽 resize(r); // 改变之后 Console.WriteLine("改变之后长为:"+r.getLength()); Console.WriteLine("改变之后宽为:"+r.getWidth()); Rectangle s=new Square(); s.setLength(10); s.setWidth(1); Console.WriteLine("正方形"); Console.WriteLine("改变之前长为:"+s.getLength()); Console.WriteLine("改变之前宽为:"+s.getWidth()); // 调用方法改变正方形的宽 resize(s); Console.WriteLine("改变之后长为:"+s.getLength()); Console.WriteLine("改变之后宽为:"+s.getWidth()); } } 我们运行一下这段代码就会发现,假如我们把一个普通长方 形的实例作为参数传入resize方法,就会看到长方形宽度逐渐增长的效果,当宽度大于长度,代码就会停止,这种行为的结果符合我们的预期;假如我们利用 里氏代换所说的,把子类的实例赋给父类,再把父类(正方形)的实例作为参数传入resize方法后,就会看到正方形的宽度和长度都在不断增长,代码会一直 运行下去,直至系统产生溢出错误。

所以,普通的长方形是适合这段代码的,正方形不适合。

我们得出结论:在resize方法中,Rectangle类型的参数是不能被Square类型的参数所代替,如果进行了替换就得不到预期结果。

因 此,Square类和Rectangle类之间的继承关系违反了里氏代换原则,它们之间的继承关系不成立,正方形不是长方形。

当运行程序的时候,长方形可以正常的改变长方形的宽度,而正方形不能改变宽度。

里氏代换原则说明了我们不能乱用继承,这里长方形的长和宽和正方形的长和宽 明显有不同的特点,所以正方形继承长方形是错误的,正确的写法是我们可以把正方形和长方形抽象出来,再让正方形和长方形继承这个抽象类,从而这两个类互不 影响,各实现各的功能。

参考:/jiaping0424/article/details/6683478 望采纳, 谢谢.

在c#中可以体现里氏替换原则的关键操作字是什么?只想知道操作字是什么!不要解释一大堆乱七八糟的东西!

int a = 10; object o = a as object; int b = (int)o;

是没有关键字的,主要是看你是否理解面向对象的思想。

OneTechCloud(31元),美国CN2 GIA高防VPS月

OneTechCloud发布了本月促销信息,全场VPS主机月付9折,季付8折,优惠后香港VPS月付25.2元起,美国CN2 GIA线路高防VPS月付31.5元起。这是一家2019年成立的国人主机商,提供VPS主机和独立服务器租用,产品数据中心包括美国洛杉矶和中国香港,Cera的机器,VPS基于KVM架构,采用SSD硬盘,其中美国洛杉矶回程CN2 GIA,可选高防。下面列出部分套餐配置信息。美国CN...

华纳云CN2高防1810M带宽独享,三网直cn218元/月,2M带宽;独服/高防6折购

华纳云怎么样?华纳云是香港老牌的IDC服务商,成立于2015年,主要提供中国香港/美国节点的服务器及网络安全产品、比如,香港服务器、香港云服务器、香港高防服务器、香港高防IP、美国云服务器、机柜出租以及云虚拟主机等。以极速 BGP 冗余网络、CN2 GIA 回国专线以及多年技能经验,帮助全球数十万家企业实现业务转型攀升。华纳云针对618返场活动,华纳云推出一系列热销产品活动,香港云服务器低至3折,...

香港E3 16G 390元/ 香港E5*2 32G 600元/ 香港站群 4-8C 1200元/ 美国200G高防 900/ 日本100M 700元

3C云国内IDC/ISP资质齐全商家,与香港公司联合运营, 已超6年运营 。本次为大家带来的是双12特惠活动,香港美国日本韩国|高速精品|高防|站群|大带宽等产品齐全,欢迎咨询问价。3C云科技有限公司官方网站:http://www.3cccy.com/客服QQ:937695003网页客服:点击咨询客户QQ交流群:1042709810价目表总览升级内存 60元 8G内存升级硬盘 1T机械 90元 2...

里氏代换原则为你推荐
httpsessionhttpsession中的SessionID是如何生成的?开票系统怎样开普通发票系统附清单策略组电脑组策略详解oracle索引如何在ORACLE数据库的字段上建立索引vipjrvipjr跟哒哒英语比,两家公司的区别在哪里?各自的特点有哪些?smartuploadSmartUpload组建实现文件上传下载,我要把文件保存到项目中的某个文件夹中,该如何实现?最好有程序参考弹幕网站A站B站网址是什么,国内很出名嗎?有什么网站特点..基础设施即服务基础设施行业的定义是什么?具体包含哪些行业?sungard恒生电子和上海sungard的offer,去哪个好???谢谢,,急急急!!!桌面管理系统WIN7如何启用桌面窗口管理器?
免费com域名申请 重庆服务器托管 老鹰主机 cdn服务器 2014年感恩节 火车票抢票攻略 云主机51web web服务器架设软件 亚洲小于500m 服务器托管什么意思 美国在线代理服务器 天翼云盘 gtt 新世界服务器 空间租赁 独享主机 贵州电信 腾讯云平台 西部主机 免费php空间申请 更多