Наследование различных конкретных реализаций абстрактного класса
Есть базовый абстрактный класс Subj
public abstract class Subj
{
public IName name;
public string ID { get; set; }
//иные члены класса
}
От него наследуют классы Company и Person реализующие его интерфейсы:
public class Company : Subj
{
//Реализует интерфейс IName
public new IName name = new NameCompany();
}
public class Person : Subj
{
//Реализует интерфейс IName
public new IName name = new NamePerson();
}
Есть также класс Client, Наследующий от Subj, добавляющий функционал
public class Client : Subj
{
//Функционал клиента
public string foldername()
{
//Возвращает имя папки
}
//Лист - Перечень судебных дел
private List<LCase> _cases = new List<LCase> { };
}
Идея в том, что Subj должен быть обязательно реализован либо как Company, либо как Person и потом при необходимости расширен функционалом Client с сохранением публичных членов. Я знаю, множественное наследование не допускается, как лучше всего реализовать Client через Company и Person?