Мне нужно создать систему управления курсами с категориями курсов:
Cooking, sewing and writing courses
cooking
и writing
каждый имеет 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
}
}