2015-07-03 12 views
6

Che cosa significa Decorare una classe o un parametro?
Qual è lo scopo e quando dovrei farlo?Cosa significa decorare una classe o un parametro?

Collegamenti a risorse e risposte dirette sono benvenuti.

Grazie.

+1

Guardando questo? http://www.codeproject.com/Articles/479635/UnderstandingplusandplusImplementingplusDecoratorp –

+1

Puoi decorare classi e membri della classe con attributi. Fondamentalmente, questi attributi sono un'altra classe derivata dalla classe System.Attribute che fornisce alcune informazioni aggiuntive. Maggiori informazioni puoi trovare qui: https: // msdn.microsoft.com/en-us/library/aa288454(v=vs.71).aspx – Fabjan

+2

In C# questo potrebbe significare utilizzare gli attributi o il modello decoratore. Suppongo che cosa intendi sia Attributi poiché si applicano a Classi e parametri. – nozzleman

risposta

3

Decoratore era uno dei 26 modelli originali descritti nel libro di Gang of Four "Design Patterns". Lo descrivono bene here.

Sommario:

Decorator: aggiungere ulteriori funzionalità a una classe in fase di esecuzione in cui sottoclassi si tradurrebbe in un aumento esponenziale di nuove classi

I modelli sono il linguaggio agnostico. Sono descrizioni di soluzioni a problemi comuni nella programmazione orientata agli oggetti. È possibile, anche preferito, discuterli senza fare riferimento a una particolare lingua. Gli esempi nel libro originale sono stati scritti in C++ e Smalltalk. Né Java né C# esistevano quando il libro fu pubblicato per la prima volta nel 1995.

3

Quando si aggiunge decoratore in C# è come aggiungere una proprietà alla classe/metodo. Ci sarà un attributo ad esso allegato.

se si scrive di prova Unità Incontrerete un semplice decoratore TestMethod così:

[TestMethod] 
public void TestMethod1() 
{ 
} 

Il quadro userà i decoratori per controllare ciò che i metodi di prova sono nel set di test.

Puoi controllare l'attributo here

V'è un altro bello leggere l'articolo su Writing Custom Attributes

Decoratori non sono limitati alla forma '[]' di decoratori. C'è anche un modello di design per questo, che è stato già menzionato prima da altri.

1

Decorare una classe significa aggiungere funzionalità a una classe esistente. Ad esempio, hai una classe SingingPerson che ha un talento nel cantare.

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

In seguito, si è deciso che la classe SingingPerson dovrebbe anche essere in grado di ballare, ma non voler modificare la struttura di classe esistente. Quello che fai è decorare la classe SingingPerson creando un'altra classe che contiene la funzionalità aggiunta. Questa nuova classe che verrà creata include un oggetto 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; 
    } 
} 

Quando si tenta di creare istanze di queste classi l'output sarà il seguente:

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

Ma significa anche __not__ sottoclasse, no? – TaW

+0

@TaW cosa intendi con 'non sottoclasse'? – jmc

Problemi correlati