基本クラスにsquare
依存する継承クラスを作成しようとしていますpolygon
。残念ながら、私の継承クラスにエラーがあります。
これは私のpolygon
クラスです:
class Polygon
{
public int Numberofsides { get; set; }=0
public Polygon(int numberofsides)
{
Numberofsides = numberofsides;
}
}
そしてこれは私のSquare
クラスです:
class Square : Polygon
{
public float Size { get; set; }
public Square (float size)
{
Size = size;
Numberofsides = 4;
}
}
私のSquare
クラスにはこのエラーがあります
'Polygon.Polygon(int)'の必須仮パラメータ 'numberofsides'に対応する引数が指定されていません
私はそれを解決する方法を理解しておらず、知りません。
ジョーンズポリスの答えは、エラーを修正するための解決策です。
ただし、この方法で継承を使用しないでください。これは、「RectangleがSquareから継承する必要があるのか、SquareがRecangleから継承するのか」という古典的な問題です。答えはどちらでもありません。(これは例えばここで議論されています:https://softwareengineering.stackexchange.com/questions/238176/why-would-square-inheriting-from-rectangle-be-problematic-if-we-override-the-set)
ここでも同じことが言えます。SquareはPolygonから継承しないでください。誰かがポリゴンタイプのオブジェクト(クラスインスタンス)を取得した場合、Squareへの制限を期待しない可能性があるためです。これは、リスコフの置換原則に違反しています。
置換可能性は、オブジェクト指向プログラミングの原則であり、コンピュータプログラムでは、SがTのサブタイプである場合、タイプTのオブジェクトをタイプSのオブジェクトに置き換えることができます(つまり、タイプTのオブジェクトを任意のオブジェクトに置き換えることができます)。サブタイプSのオブジェクト)Tの望ましいプロパティ(正確さ、実行されたタスクなど)を変更することなく。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加