ホームページ  >  記事  >  バックエンド開発  >  Liskov 置換原則とは何ですか?また、それを C# で実装する方法は何ですか?

Liskov 置換原則とは何ですか?また、それを C# で実装する方法は何ですか?

PHPz
PHPz転載
2023-09-18 19:17:04720ブラウズ

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

#派生型は、その基本型を完全に置き換え可能である必要があります。

定義:

サブクラスを親クラスとして扱うことができるはずです。基本的に、これは、すべての派生クラスが親クラスの機能を保持する必要があり、親クラスが提供する機能を置き換えることはできないことを意味します。

リスコフ氏の交代前

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

以上がLiskov 置換原則とは何ですか?また、それを C# で実装する方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。