Я работаю в кодовой базе C #, которая имеет иерархию классов:
class Animal { Animal prey; }
class Mammal : Animal { Mammal[] livesAmicablyWith; }
class Lion : Mammal { }
Простите за глупый пример.
Я хотел бы переназначить эту иерархию классов для чего-то представимого в том же точном формате объекта, но для которого требуется больше данных. В моем идеальном мире это выглядело бы так:
class Animal { Animal prey; string moreAnimalData; }
class Mammal : Animal { Mammal[] livesAmicablyWith; string moreMammalData; }
class Lion : Mammal { string moreLionData; }
Однако я хочу избегать добавления членов в эту существующую иерархию, поскольку в лучшем случае они будут потрачены впустую, а в худшем - отвлекаться от ошибок.
Кроме того, мне нужны все оригинальные функции, чтобы продолжить работу! Вот о чем я думал:
class AnimalExtended : Animal { }
class MammalExtended : Mammal {
public void UseLivesAmicablyWith()
{
foreach(Mammal m in livesAmicablyWith)
{
if(!(m is MammalExtended)
throw new Exception();
// use the MammalExtended
}
}
}
class LionExtended : Lion { }
Есть предложения?