装饰类或参数意味着什么?

时间:2015-07-03 13:59:13

标签: c# class parameters

装饰类或参数是什么意思?
我的目的是什么,我什么时候会这样做?

欢迎链接到资源和直接答案。

感谢。

3 个答案:

答案 0 :(得分:5)

在C#中添加装饰器时,就像在类/方法中添加属性一样。将附加一个属性。

如果您编写单元测试您将会遇到一个简单的装饰器TestMethod

[TestMethod]
public void TestMethod1()
{
}

框架将使用装饰器来检查测试集中的测试方法。

您可以查看属性here

还有一篇关于Writing Custom Attributes

的文章

装饰者不仅限于' []'装饰的形式。还有一种设计模式,其他人已经提到过。

答案 1 :(得分:4)

装饰师是“四人帮”"Design Patterns"一书中描述的原始26种模式之一。他们很好地描述了here

要点:

  

装饰器:在运行时向类中添加其他功能   子类化将导致新类的指数上升

模式与语言无关。它们描述了面向对象编程中常见问题的解决方案。在没有参考特定语言的情况下讨论它们是可能的,甚至是优选的。原书中的例子是用C ++和Smalltalk编写的。该书于1995年首次出版时,既没有Java也没有C#。

答案 2 :(得分:1)

装饰类意味着向现有类添加功能。例如,你有一个具有唱歌天赋的班级SingingPerson

public class SingingPerson
{
    public string Talent = "I can sing";
    public string DoTalent()
    {
        return Talent;
    }
}

稍后,您决定SingingPerson类也应该能够跳舞但不想改变现有的类结构。你要做的是通过创建另一个包含添加功能的类来装饰SingingPerson类。您将要创建的这个新类包含SinginPerson对象。

public class SingingAndDancingPerson {
    SingingPerson person;
    public string Talent { get; set; }
    public SingingAndDancingPerson(SingingPerson person)
    {
        this.person = person;
    }

    public string DoTalent()
    {
        this.Talent = person.Talent;
        this.Talent += " and dance";
        return this.Talent;
    }
}

当您尝试创建这些类的实例时,输出将如下所示:

 SingingPerson person1 = new SingingPerson();
        Console.WriteLine("Person 1: " + person1.DoTalent());
        SingingAndDancingPerson person2 = new SingingAndDancingPerson(person1);
        Console.WriteLine("Person 2: " + person2.DoTalent());
        Console.ReadLine();