【发布时间】:2015-01-31 17:00:19
【问题描述】:
我正在寻找一种方法来共享两个类的实现而不暴露该共享的任何细节。我希望创建这个基本的类结构:
- 公共接口 MyInterface
- 类 MyCommonImpl : MyInterface
- 公共类 MyImplA : MyCommonImpl
- 公共类 MyImplB : MyCommonImpl
MyCommonImpl 实现了MyInterface 的功能,并在MyImplA 和MyImplB 中提供了一个抽象函数。 MyImplA 的用户不应该以任何方式了解MyCommonImpl,这只是一个实现细节。
我考虑过手动合成,但这涉及复制大量代码来转发函数。这也是有问题的,因为在MyCommonImpl 中实现了一些事件,并且它们的参数之一是sender。这需要放置一个代理处理程序并部分重写事件。基本上组合需要更多的代码,而不是简单地复制粘贴整个MyCommonImpl。
如何在不重复大量代码的情况下做到这一点?
【问题讨论】:
-
我不太明白这个问题;问题中提出的设计完全有道理。隐藏
MyCommonImpl到MyImplA和MyImplB的原因是什么? -
我们不想在模块中暴露
MyCommonImpl。也就是说,图书馆的用户不应该看到它,因为它成为公共界面的一部分。据我了解,我实际上无法执行上述操作,请使用私有基类继承到公共类。 -
使用组合,而不是继承 - Wikipedia: Composition over inheritance
-
@LasseV.Karlsen,我已经解释了为什么我不想使用合成。它基本上涉及对代码的复制粘贴,并涉及拦截事件回调。
-
好吧,你不能创建一个继承自内部类的公共类。
标签: c#