您好,欢迎访问一九零五行业门户网

什么是里氏替换原则以及如何在 C# 中实现?

派生类型必须完全可替代其基类型。
定义:我们应该能够将子类视为父类。本质上,这意味着所有派生类都应保留其父类的功能,并且不能替换父类提供的任何功能。
在 liskov 替换之前public class ellipse { public double majoraxis { get; set; } public double minoraxis { get; set; } public virtual void setmajoraxis(double majoraxis){ this.majoraxis = majoraxis; } public virtual void setminoraxis(double minoraxis){ this.majoraxis = minoraxis; } public virtual double area() { return majoraxis * minoraxis * math.pi; }}public class circle : ellipse { public override void setmajoraxis(double majoraxis) { base.setmajoraxis(majoraxis); this.minoraxis = majoraxis; //in a cirle, each axis is identical }}public class result { public void method1() { circle circle = new circle(); circle.setmajoraxis(5); circle.setminoraxis(4); var area = circle.area(); //5*4 = 20, but we expected 5*5 = 25 }}
利斯科夫替换后internal class program { private static void main() { }}public class ellipse { public double majoraxis { get; set; } public double minoraxis { get; set; } public virtual void setmajoraxis(double majoraxis) { majoraxis = majoraxis; } public virtual void setminoraxis(double minoraxis) { majoraxis = minoraxis; } public virtual double area() { return majoraxis * minoraxis * math.pi; }}public class circle : ellipse { public override void setmajoraxis(double majoraxis) { base.setmajoraxis(majoraxis); this.minoraxis = majoraxis; //in a cirle, each axis is identical } public override void setminoraxis(double minoraxis) { base.setminoraxis(minoraxis); this.majoraxis = minoraxis; } public override double area() { return base.area(); }}public class circle1 { public double radius { get; set; } public void setradius(double radius) { this.radius = radius; } public double area() { return this.radius * this.radius * math.pi; }}
以上就是什么是里氏替换原则以及如何在 c# 中实现?的详细内容。
其它类似信息

推荐信息