【发布时间】:2017-12-16 10:55:34
【问题描述】:
关于为什么这个程序结束时海拔不是 5 的任何想法? 所以我有一个派生自 Birds 的 Penguin 类,在 Birds 类中,我检查鸟类是否不会飞,并基于此将给定高度重置为 0 或保持提供的高度。 假设企鹅会飞(isFlightless=false),Penguin.ArrangeBirdInPatterns(p);应该触发它所做的 ArrangeBirdInTheSky,然后高度应该是我提供的高度(= 5),而不是零。
我的 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 定义中删除静态?
【问题讨论】:
-
你忘了放语言标签。
标签: c# subclass superclass