Это моя цепочка наследования.Есть два из них.Один для животных, другой для поведения животных.
AnimalBaseClass
|- Reptile
| |- Crocodile
| |- Snake
|
|- Mammals
|- Apes
|- Felines
AnimalBehaviourBaseClass
|- ReptileBehaviour
|
|
|
|- MammalBehaviour
В AnimalBaseClass есть метод SetCurrentBehaviour с параметром типа.
Я хотел бы иметь AnimalBehaviourBaseClass, который имеет методы, которые объединяют все виды поведения.Это наследуется как классами ReptileBehaviour, так и MammalBehaviour.
Классы, унаследованные от AnimalBaseClass, должны иметь возможность только устанавливать поведение его класса животных.Поэтому крокодил и змея могут принимать только поведение ReptileBehaviour и классы, полученные из него.А Обезьяны и Кошачьи могут принимать только MammalBehaviour и классы, вытекающие из него.
Но фактический метод SetCurrentBehaviour одинаков для всех животных.Возможно ли каким-то образом через полиморфизм изменить требование к типу, чтобы оно было принудительным?В AnimalBaseClass он должен использовать SetCurrentBehaviour
в Reptile, это должен быть SetCurrentBehaviour, а в млекопитающих SetCurrentBehaviour
Конечно, я мог бы добавить методы к классам Reptile и Mammal, но тогда оригинальный SetCurrentBehaviourCour был бы еще большетам.
Может быть, я не думаю об этом правильно в соответствии с ООП и C #?