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.
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.
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.
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.
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();
diese gesucht? http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImplementingplusDecoratorp –
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
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