我有四个类和一个界面,如下所示:
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
之间的数据完整性,因为前一类经常更新其属性。
提前感谢您的帮助。
答案 0 :(得分:0)
要调用抽象类的非静态方法,您总是需要一个类实例,因此您必须将其子类化。
如果DesiredFunc
的{{1}}为SourceB
,您的包装类可以简化为:
public
然后会自动公开public class SourceBChild : SourceB
{
}
方法。但是如果它是DesiredFunc
,你需要像现在一样包装它。
您的评论的最后一行对我没有多大意义 - 您提到了数据完整性和属性,但由于protected
的{{1}}在DesiredFunc
的实例上运行,因此无法使用SourceB
实例的字段或属性。