1

为了可视化我的问题,这里有一张小图:

问题

我们这里有两个程序集。两者都被混淆了。基础是我们编写和混淆的。特殊的由另一个人 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

4

0 回答 0