装饰器设计模式是扩展类功能的一个很好的解决方案。例如,如果我想要现有类方法的预处理和后处理方法,我可以创建一个装饰器并覆盖基类中的现有方法,并分别调用我的预处理和后处理方法。
我的问题是,在应用程序设计过程中很少会出现上述要求。我不能将我创建的所有方法都标记为虚拟方法,以便它们可以被装饰器覆盖。因此,我将不得不求助于方法隐藏。
有没有更好的方法来设计我的类,以便在我想要覆盖任何方法的情况下,它可以以最好的方式完成。
装饰器设计模式是扩展类功能的一个很好的解决方案。例如,如果我想要现有类方法的预处理和后处理方法,我可以创建一个装饰器并覆盖基类中的现有方法,并分别调用我的预处理和后处理方法。
我的问题是,在应用程序设计过程中很少会出现上述要求。我不能将我创建的所有方法都标记为虚拟方法,以便它们可以被装饰器覆盖。因此,我将不得不求助于方法隐藏。
有没有更好的方法来设计我的类,以便在我想要覆盖任何方法的情况下,它可以以最好的方式完成。
通常当我装饰一个类时,我是通过组合而不是继承来完成的。这样你就不需要覆盖任何东西。
您是否考虑过使用方面(AOP)?-在你写评论后添加:你可以看看 log4postsharp 项目,看看他们如何使用方法上的属性。Log4PostSharp
如果您使用 f.ex Reflector 编译并打开 dll,您将看到在运行时添加了前置和后置操作。
- 也可以使用 xml-configs 添加此类行为