Мне нужно создать систему управления курсами с категориями курсов:
Cooking, sewing and writing courses
кулинария
и письмо
, в каждом есть 2 курса (итальянский, морепродукты, творческое письмо и деловое письмо). Это создает производное абстрактное:
abstract course -> abstract cooking -> concrete seafood
Абстрактное приготовление и запись имеют общие поля и некоторые общие методы, однако они также имеют абстрактные методы, которые являются абстрактными в базовом классе.
Можно ли это сделать в C #? Если я сделаю методы производного абстрактного класса абстрактными, Visual Studio скажет, что они скрывают абстрактный базовый класс, а затем в методах конкретного класса есть ошибки, в которых говорится, что базовый класс должен быть абстрактным (он есть, но не должен регистрироваться). Я искал ответ. Я знаю, что в C # используется одинарное наследование, но наследование ведет вниз по цепочке. Каков наилучший ответ?
Вот фрагмент кода - я надеюсь, он проясняет проблему:
public abstract class Course
{
public abstract void AddStudent(StudentName sn, int f);
public abstract decimal CalculateIncome();
}
public abstract class WritingCourse : Course
{
public void AddStudent(StudentName sn, int f)
{
//Add student
}
public abstract decimal CalculateIncome(); // can only be claculated in concrete
}
public class BusinessWritCourse : WritingCourse
{
public void AddStudent(StudentName sn, int f):
base(sn, false){}
public decimal CalculateIncome()
{
return //do stuff
}
}
public class SewingCourse : Course
{
public override void AddStudent(StudentName sn, int f)
{
//do stuff
}
public override decimal CalculateIncome()
{
return //do stuff
}
}