2015-07-03 10 views
6

Was bedeutet es, eine Klasse oder einen Parameter zu dekorieren?
Was ist der Zweck und wann würde ich das tun?Was bedeutet es, eine Klasse oder einen Parameter zu dekorieren?

Links zu Ressourcen und direkte Antworten sind willkommen.

Danke.

+1

diese gesucht? http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImplementingplusDecoratorp –

+1

Sie können Klassen und Klassenmitglieder mit Attributen dekorieren. Grundsätzlich sind diese Attribute eine andere Klasse, die von der Klasse System.Attribute abgeleitet ist und zusätzliche Informationen bereitstellt. Weitere Informationen finden Sie hier: https: // msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx – Fabjan

+2

In C# könnte dies entweder die Verwendung von Attributen oder das Decorator-Muster bedeuten. Ich nehme an, Sie meinen Attribute, da sie sowohl für Klassen als auch für Parameter gelten. – nozzleman

Antwort

3

Decorator war eines der ursprünglichen 26 Muster in der Gang of Four beschrieben "Design Patterns" Buch. Sie beschreiben es gut here.

Zusammenfassung:

Decorator: Fügen Sie zusätzliche Funktionalität zu einer Klasse zur Laufzeit, wo Subklassifizieren in einem exponentiellen Anstieg neuer Klassen führen würden

Patterns sprachunabhängig ist. Sie sind Beschreibungen von Lösungen für allgemeine Probleme in der objektorientierten Programmierung. Es ist möglich, sogar bevorzugt, sie ohne Bezug zu einer bestimmten Sprache zu diskutieren. Die Beispiele im Originalbuch wurden in C++ und Smalltalk geschrieben. Weder Java noch C# existierten, als das Buch zum ersten Mal im Jahr 1995 veröffentlicht wurde.

3

Wenn Sie einen Decorator in C# hinzufügen, ähnelt das dem Hinzufügen einer Eigenschaft zur Klasse/Methode. Es wird ein Attribut hinzugefügt werden.

Wenn Sie schreiben Unit-Test Sie einen einfachen Dekorateur TestMethod so erfüllen:

[TestMethod] 
public void TestMethod1() 
{ 
} 

Der Rahmen wird die Dekorateure benutzen zu überprüfen, welche Testmethoden im Test-Set sind.

können Sie auf der here

Es gibt einen weiteren schönen Artikel über Writing Custom Attributes

Zierer zu lesen ist nicht auf die ‚[]‘ Form von Dekorateure beschränkt Attribut überprüfen. Dafür gibt es auch ein Designmuster, das bereits von anderen erwähnt wurde.

1

Das Deklarieren einer Klasse bedeutet das Hinzufügen von Funktionalität zu einer vorhandenen Klasse. Zum Beispiel haben Sie eine Klasse SingingPerson, die ein Talent des Singens hat.

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

Später haben Sie entschieden, dass die SingingPerson Klasse auch in der Lage sein sollte, tanzen, wollen aber nicht die bestehende Klassenstruktur zu verändern. Was Sie tun, ist, dekorieren Sie die SingingPerson Klasse, indem Sie eine andere Klasse erstellen, die die hinzugefügte Funktionalität enthält. Diese neue Klasse, die Sie erstellen werden, nimmt ein Objekt 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; 
    } 
} 

Wenn Sie versuchen, Instanzen dieser Klassen erstellen wird die Ausgabe der folgenden sein:

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

Aber es bedeutet auch __nicht__ Unterklasse, nein? – TaW

+0

@TaW was meinst du mit 'nicht Unterklasse'? – jmc

Verwandte Themen