Я сталкивался с этой проблемой несколько раз, и тот факт, что я не могу найти ответ, заставляет меня думать, что я делаю что-то странное на фундаментальном уровне, но здесь идет речь:
У меня естьабстрактный класс, который содержит свойство интерфейса (или абстрактного класса), которое определяет все общие методы, которые понадобятся любому дочернему элементу:
interface IFoo
{
...
}
abstract class Parent
{
IFoo Foo { get; set; }
}
Затем у меня есть дочерний класс, который реализует этот абстрактный класс, и в егоконструктор, он устанавливает это свойство интерфейса в свою собственную реализацию:
class Child : Parent
{
Child()
{
Foo = new ChildFoo();
}
}
class ChildFoo : IFoo
{
SomeMethod()
{
}
}
Проблема в том, что всякий раз, когда мне нужно вызвать SomeMethod () в Child, мне нужно сначала уменьшить Foo до ChildFoo.Должен ли я просто добавить свойство getter в Child, которое просто возвращает Foo как ChildFoo?Или я делаю что-то не так на фундаментальном уровне?
Редактировать:
Я прошу прощения за редактирование и за непринятие ответа (который на самом деле может стоять), но я чувствую, что должен былбыл более явным, потому что я все еще немного растерялся.
Parent и Child на самом деле являются контроллерами OData, а IFoo является интерфейсом сервисного уровня, который определяет основные методы CRUD.
Существует много дочерних контроллеров ODataВсе они содержат конечные точки для методов CRUD, определенных IFoo.Однако некоторые дочерние элементы также имеют конечные точки пользовательских функций, которые вызывают специфичные для сущности методы, которые не определены в IFoo.
Я надеялся избежать большого количества избыточного кода контроллера, поскольку все общие дочерние конечные точки вызывают универсальные методы.в родительском контроллере, используя свойство IFoo.Проблема в том, что я не могу вызвать специфичные для сущности методы в контроллере Child, не приведя IFoo к ChildFoo ().
Я начинаю думать, что мне следует просто полностью удалить родительский контроллер и добавить помощникакласс, который содержит методы с параметрами IFoo.
Извиняюсь, если я просто повторяюсь ..
Спасибо