为了可视化我的问题,这里有一张小图:
我们这里有两个程序集。两者都被混淆了。基础是我们编写和混淆的。特殊的由另一个人 A 编写和混淆。A 没有我们的来源,我们也没有他的来源。整个想法是,A 希望能够扩展我们的BaseAssembly
. A 知道我们在BaseInterfaceAssembly
. 他想通过在调用基本实现之前BaseClass
添加methodB()
和做一些事情来扩展我们的。是内部的和混淆的。methodA()
BaseClass
这就是装饰器发挥作用的地方。我们可以强制 A 为一个BaseInterface
对象做一个装饰器。为此,我们需要创建一个抽象装饰器基础,其中 A 只需要覆盖methodA()
和添加methodB()
。对他来说,不会有什么不同。对我们来说,我们必须为每个接口编写和维护这些抽象装饰器。这是我们不想要的开销。
第一个问题,是否存在双方都没有开销的替代方案 - 如果在创建对象后不会产生性能问题,我也会接受某种黑客攻击?
第二个问题,如果没有其他选择,有没有办法编写一个抽象装饰器的所有接口,并且将来会在那里?
编辑
根据要求提供一些示例代码:
public interface BaseInterface
{
void MethodA();
}
internal class BaseClass : BaseInterface
{
public virtual void MethodA()
{
//do something
}
}
internal class SpecialClass : BaseClass
{
public override void MethodA()
{
//do something before
base.MethodA();
}
public void MethodB()
{
//do something
}
}
问候, Yggdrasil