装饰类或参数是什么意思?
我的目的是什么,我什么时候会这样做?
欢迎链接到资源和直接答案。
感谢。
答案 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();