Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, gamburger, Вы писали:
G>>Я думаю, что должно быть возможно задать такие настройки генериков и констрейнтов, чтобы все строго типизировалось и при этом компилилось, если только сишарп сам не является преградой, потому что с точки зрения логики я не вижу тут проблем.
S>Именно с тз логики и проблема, у Вас по сути рекурсивное определение -- абстрактный класс зависит от интерфейса, интерфейс зависит от асбтрактного класса.
В случае циклич. зависимости
class Q1 : Q2
{ }
class Q2 : Q1
{ }
компилер пишет:
Циклическая зависимость базового класса включает "Q2" и "Q1"
А в моем случае он пишет совсем не то.
Но даже если предположить, что проблема именно в рекурсии, то тогда как реализовать схему для такой задачи?
Есть Хищник, Травоядное, Растение.
Хищник и Травоядное должны иметь список жертв, т.к. проперти общее, то его выносим в базовый класс Животное, и нужно, чтобы у Хищника жертвами могли быть только Травоядные, а у Травоядных жертвами могли быть только Растения.
Травоядные и Растения могут быть одинаково съедены соответвенно Хищниками и Травоядными, т.е. нужен общий метод BeEatenBy(Animal animal). При этом чтобы у Травоядного этот метод был таким BeEatenBy(Хищник animal), а у Растения таким BeEatenBy(Травоядное animal) .
Как сделать такую схему?