2015-07-03 27 views
6

装饰类或参数意味着什么?
什么是目的?我什么时候可以这样做?装饰类或参数意味着什么?

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

谢谢。

+1

展望呢? http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImpplementingplusDecoratorp –

+1

您可以修饰具有属性的类和类成员。基本上这个属性是派生自类System.Attribute的另一个类,它提供了一些额外的信息。更多信息可以在这里找到:https:// msdn。microsoft.com/en-us/library/aa288454(v=vs.71).aspx – Fabjan

+2

在c#这可能意味着使用属性或修饰器模式。我假设你的意思是属性,因为它们适用于类和参数。 – nozzleman

回答

3

装饰者是在四人帮"Design Patterns"书中描述的原始26种模式之一。他们描述得很好here

摘要:

装饰:在运行时哪里会导致新的类指数上升

模式是与语言无关 子类一类添加额外的功能。它们描述了面向对象编程中常见问题的解决方案。甚至可以选择,而不用特定的语言来讨论它们。原书中的例子是用C++和Smalltalk编写的。当这本书在1995年首次发布时,Java和C#都不存在。

3

当您在C#中添加装饰器时,就像向类/方法中添加属性一样。将会有一个属性附加到它。

如果你写单元测试你会遇到一个简单的装饰TestMethod这样的:

[TestMethod] 
public void TestMethod1() 
{ 
} 

该框架将使用装饰检查方法是在测试集考什么。

您可以在属性here

检查还有一个很好的阅读一篇关于Writing Custom Attributes

装饰不限于装饰的“[]”的形式。这也是一种设计模式,其他人已经提到过。

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(); 
+0

但它也意味着__not__子类,不是? – TaW

+0

@TaW“不是子类”是什么意思? – jmc