【发布时间】:2015-05-13 12:18:53
【问题描述】:
我有四个类和一个接口,如下所示:
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(),但它需要在SourceB 中使用DesiredFunc() 的实现。
到目前为止,我所做的是创建一个SourceB 的包装类。我在SourceAChild 中创建了该类的一个实例,然后调用基本方法。类似的东西
public class SourceBChild : SourceB, ISource
{
DesiredFunc()
{
base.DesiredFunc();
}
}
public class SourceAChild : SourceA, ISource
{
SourceBChild srcB = new SourceBChild();
DesiredFunc()
{
srcB.DesiredFunc();
}
}
这对我来说似乎很丑陋。有没有更好的方法来实现DesiredFunc() 的SourceB's?我目前使用的解决方法可以看到的最大问题之一是SourceAChild 和SourceBChild 之间的数据完整性,因为前一个类经常更新其属性。
提前感谢您的帮助。
【问题讨论】:
-
也许你可以考虑实现一个装饰器模式?
-
SourceB是您创建的,还是来自与SourceA相同的库? -
好吧,我没有创建
SourceB。尽管有人建议我尽可能不要这样做,但这是可以修改的。
标签: c# .net inheritance abstract-class