高度がこのプログラムの最後に5でない理由についての考えはありますか? 私は鳥から派生したペンギンクラスを持っています。鳥クラスでは、鳥が飛行していないかどうかを確認し、それに基づいて与えられた高度を0にリセットするか、または提供された高度を維持します。 ペンギンが飛べるとすれば(isFlightless = false)、Penguin.ArrangeBirdInPatterns(p); ArrangeBirdInTheSkyをトリガーする必要があります。高度は、ゼロではなく、指定した高度(= 5)でなければなりません。スーパークラスの動作がPenguinオブジェクトに期待通りに適用されない
私のVSがクラッシュしました。私はオンラインフィドラーを使用しており、デバッグは難しいです。
using System;
public class Bird {
public double altitude;
public bool isFlightless;
public virtual void setLocation(double longitude, double latitude) {
}
public virtual void setAltitude(double altitude) {
this.altitude = altitude;
}
public void ArrangeBirdOnGround()
{
setAltitude(0);
}
public void ArrangeBirdInTheSky()
{
setAltitude(altitude);
}
public static void ArrangeBirdInPatterns(Bird b)
{
if(b.isFlightless)
{
b.ArrangeBirdOnGround();
}
else
{
b.ArrangeBirdInTheSky();
}
}
};
public class Penguin : Bird
{
public override void setAltitude(double altitude) {
}
}
public class Program
{
public static void Main()
{
Bird p = new Penguin();
p.setAltitude(5);
p.isFlightless = false;
Penguin.ArrangeBirdInPatterns(p);
Console.WriteLine(p.altitude); //// returns 0. why not 5
}
}
また、なぜ私はそれをArrangeBirdInPatterns(p)と呼ぶことはできません。 ArrangeBirdInPatterns定義から静的を削除するとどうなりますか?
言語タグを入力するのを忘れました。 – Mat