При вызову Soldier метод Soldier.FindQ() возвращает произведние weight и hight, как и нужно. Но при вызове SoldierNew (потомок) Soldier.FindQ() всегда возвращает 0, из-за чего SoldierNew.FindQ() считает непраивльно. Не понимаю в чем ошибка?!
public class Soldier
{
private string surname;
private int height;
private int weigth;
protected double q;
public Soldier(string surname, int height, int weigth)
{
this.surname = surname;
this.height = height;
this.weigth = weigth;
q = FindQ();
}
public virtual double FindQ()
{
return height * weigth;
}
public String PrintInfo()
{
StringBuilder sb = new StringBuilder();
sb.Append(' ' + surname + '\n' +
"Рост - " + height + '\n' +
"Вес - " + weigth + '\n' +
"Q - " + FindQ() + '\n');
return sb.ToString();
}
public class SoldierNew : Soldier
{
private Education p;
public SoldierNew(string surname, int height, int weigth, Education p) : base(surname, height,
weigth)
{
this.p = p;
}
public override double FindQ()
{
if (p.Equals(Education.higher))
return 2 * q;
if (p.Equals(Education.primary))
return 0.5 * q;
return q;
}
}
Когда вы создаёте объект SoldierNew то вы входите в конструктор базового класса и в нём начинаете считать q. Только расчёт идёт вызывая FindQ из наследника, а не из базового класса.
Но там получается вот какой момент: чтобы посчитать q вам надо знать q, а его нет.
По логике вероятно вы ожидаете что-то типа:
public override double FindQ()
{
q = base.FindQ();
if (p.Equals(Education.higher))
return 2 * q;
if (p.Equals(Education.primary))
return 0.5 * q;
return q;
}
Update: Если я правильно понял, то @tym32167 предлагает более правильный вариант:
public override double FindQ()
{
var baseQ = base.FindQ();
if (p.Equals(Education.higher))
return 2 * baseQ;
if (p.Equals(Education.primary))
return 0.5 * baseQ;
return baseQ;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
я сделал голосового ассистента на Python, но решил, перейти на C#По видеоуроку я написал этот код который должен слушать микрофон и писать цифру...
Есть анонимный метод (выполняет через рефлексию методы объекта)
Не понимаю почему сохранение не работает, скинул весь скрипт, обратите внимание например на функцию MusicVolumeSet, и в старте на её загрузку, я вроде...
Попробовал открыть проект aspnet core 2