Несколько производных абстрактных классов?

Мне нужно создать систему управления курсами с категориями курсов:

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
    }
}
7
задан Anatoliy Nikolaev 27 November 2013 в 22:24
поделиться