Мне нужно подвергнуть объект одному из типов, которые имеют определенное свойство и метод. Во-первых, мне нужно проверить, является ли мой объект экземпляром одного из этих типов, а затем мне нужно передать его этому типу и выполнить некоторые действия.Как наложить объект на тип в C#
Как я могу это сделать без повторения кода?
var foo = GetAnimalById(animalId); // Animal type returned to foo
var animal = new Animal(); // Animal class hasn't Age property and GiveVitamins method
if (foo is Tiger) {
animal = foo as Tiger;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
if (foo is Lion) {
animal = foo as Lion;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
if (foo is Monkey) {
animal = foo as Monkey;
if (animal.Age >= 10)
{
animal.GiveVitamins();
}
}
Существует динамический пример отправки с помощью 'dynamic', но я оставлю это на данный момент. Похоже, что все животные могут делиться членами «Age» и «GiveVitamins», так почему бы не продвинуть их в базовый класс «Animal»? –
Я думаю, что здесь что-то не так с дизайном. Почему в классе 'Animal' нет свойства' Age'? Можете ли вы назвать животное, которое не состарилось? – Sweeper
Если вы не можете переместить 'Age' и' GiveVitamines' в 'Animal', подумайте о создании интерфейса, который содержит оба, пусть' Tiger', 'Lion' и' Monkey' реализуют этот интерфейс и проверяют эту реализацию. –