c#中的装饰器图案和扩展方法

在先描述我的问题之前,我想定义Decorator和Extension方法的定义
装饰

Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality

扩展方法

Extension methods enable you to “add” methods to existing types without creating a new derived type, recompiling, or otherwise modifying the original type

我有以下代码片段在c#

public interface IMyInterface
{
    void Print();
}

public static class Extension
{
    public static void PrintInt(this IMyInterface myInterface, int i)
    {
        Console.WriteLine
            ("Extension.PrintInt(this IMyInterface myInterface, int i)");
    }

    public static void PrintString(this IMyInterface myInterface, string s)
    {
        Console.WriteLine
            ("Extension.PrintString(this IMyInterface myInterface, string s)");
    }
}

public class Imp : IMyInterface
{
    #region IMyInterface Members

    public void Print()
    {
        Console.WriteLine("Imp");
    }

    #endregion
}

class Program
{
    static void Main(string[] args)
    {
        Imp obj = new Imp();
        obj.Print();
        obj.PrintInt(10);
    }
}

在上面的代码中,我扩展接口而不修改现有代码,这两种方法可用于派生类。所以我的问题是:扩展方法是否替代了装饰器模式?

扩展方法实际上只是调用静态方法的语法糖。

使用装饰器,您实际上可以更改装饰类的行为,扩展方法只能改变类的属性或调用方法,就像“普通”静态方法一样。

装饰器模式实际上被定义为使用包装器来改变行为,扩展方法显然不行。

翻译自:https://stackoverflow.com/questions/4888116/the-decorator-pattern-extension-methods-in-c-sharp

转载注明原文:c#中的装饰器图案和扩展方法