У меня есть четыре класса и интерфейс, что-то вроде этого:Сопряжение с абстрактным классом Different производного класса
public interface ISource
{
DesiredFunc();
}
public class Source
{
}
public class SourceA : Source
{
}
public class SourceAChild : SourceA, ISource
{
DesiredFunc()
{
}
}
public abstract class SourceB : Source, ISource
{
DesiredFunc()
{
}
}
Source
и SourceA
приходят из библиотеки, так что нет никакого способа, я могу изменить их реализацию. Существует объект SourceAChild
, который вызывает DesiredFunc()
, но ему необходимо использовать реализацию DesiredFunc()
в SourceB
.
Что я сделал до сих пор, это создать класс обертки SourceB
. Я создаю экземпляр этого класса внутри SourceAChild
, а затем вызываю базовый метод. Что-то вроде
public class SourceBChild : SourceB, ISource
{
DesiredFunc()
{
base.DesiredFunc();
}
}
public class SourceAChild : SourceA, ISource
{
SourceBChild srcB = new SourceBChild();
DesiredFunc()
{
srcB.DesiredFunc();
}
}
Это кажется довольно уродливым для меня. Есть ли лучший способ добраться до SourceB's
внедрения DesiredFunc()
? Одна из самых больших проблем, с которыми я сталкиваюсь в обходной ситуации, которую я сейчас вижу, - это целостность данных между SourceAChild
и SourceBChild
, потому что прежний класс часто обновляет свои свойства.
Заранее благодарим за любую помощь.
Возможно, вы можете изучить образец декоратора? –
Создано ли 'SourceB' то, что вы создали, или это из той же библиотеки, что и' SourceA'? – SwDevMan81
Ну * I * не создавал 'SourceB'. Это то, что можно изменить, хотя мне было рекомендовано не по возможности. – Josh