Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah Prinsip Penggantian Liskov dan bagaimana untuk melaksanakannya dalam C#?

Apakah Prinsip Penggantian Liskov dan bagaimana untuk melaksanakannya dalam C#?

PHPz
PHPzke hadapan
2023-09-18 19:17:04666semak imbas

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

Jenis terbitan mesti boleh diganti sepenuhnya untuk jenis asasnya.

Definisi:

Kita sepatutnya boleh menganggap kelas kanak-kanak sebagai kelas ibu bapa. Pada asasnya, ini bermakna semua kelas terbitan harus mengekalkan kefungsian kelas induknya dan tidak boleh menggantikan sebarang kefungsian yang disediakan oleh kelas induk.

Sebelum penggantian 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
   }
}

Selepas penggantian Liskov

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;
   }
}

Atas ialah kandungan terperinci Apakah Prinsip Penggantian Liskov dan bagaimana untuk melaksanakannya dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam