【发布时间】:2013-02-19 02:54:31
【问题描述】:
我想知道我们是否可以将扩展方法视为 C# 中装饰器模式的实现?因为目标相同,但实施的逻辑和概念可能不同?
谢谢!
【问题讨论】:
-
它们与装饰器模式有什么相似之处?扩展方法只是调用静态方法的语法糖。静态方法是“普通的旧功能”。装饰器是当您让一个对象通过包装/委托其方法或添加新方法来扩展另一种类型对象的行为时。
-
我认为这对于初学者来说是一个非常好的/有效的问题。我不确定为什么投反对票..
-
我想你错过了一些了解。当您查看 Intelisense 时,当然扩展方法会“装饰”一种类型。但是,看看像
StreamReader这样的好的装饰器实现。您注意到这是来自Stream的派生类,并且真正装饰了 Stream 的功能...... -
@CSharper 嗯?
StreamReader不是从Stream派生的。这也不是让它成为装饰者的东西。完全相反的事实。当您想要扩展基类的新实例的行为时,您可以使用派生类。当你想改变一个特定的、已经存在的装饰类实例的行为时,你可以使用装饰器。 (如果说得通,我不知道如何正确表达。) -
@CSharper 或者,借用维基百科:子类化在编译时改变行为,在运行时修饰改变行为。
标签: c# design-patterns decorator