Я пытаюсь понять, какая иерархия будет лучшей для наследования, описанной ниже. До сих пор у меня было следующее:Общий абстрактный базовый класс от общего интерфейса
public interface IManager<T> where T : ISomeObject
{
bool Add(T o);
bool Remove(T o);
bool Update(T o);
}
Но тогда я хотел, чтобы каждый производный класс имел параметризованный конструктор. Поэтому я пошел:
public abstract class Manager<T> : IManager<T> where T : ISomeObject
{
protected readonly INeededObject obj;
protected Manager(INeededObject o)
{
obj = o;
}
}
Любые идеи о том, как мне решить эту проблему? Заранее спасибо.
я не знаю, но того, чтобы определить, что 'T' как в' интерфейсе 'и' abstract class' чувствует себя немного странно и неправильно. – Kunal
@ Кунал, вы не 'определяете' 'T' в двух местах. 'T' - это просто имя параметра - вроде как параметр функции. Фактически вы можете дать 'T' любое имя, которое вы хотите в обоих местах, например. 'class Manager'. 'T' - это просто конвенция. –
Да, я понимаю использование дженериков, однако, по-прежнему считаю, что нужно избыточно указывать, какой тип «T», как в «интерфейсе», так и «абстрактном классе», не стоит нигде по линиям OOD. Я согласен с тем, что ваш - один из способов сделать параметризованный конструктор, но мое редактирование - это то, что я искал (если нет недостатка). – Kunal