Attualmente sto lavorando a uno strumento che deve creare una sorta di .NET personalizzato con alcuni campi aggiuntivi. Mi chiedevo quale approccio è migliore per risolvere questo e pensato nei seguenti opzioni:Funzionalità di espansione per i controlli .NET
Opzione A: - Creare una classe derivata per ogni controllo (diciamo, CLabel, CGroupBox ...) dove definisco i nuovi campi su ogni classe. Ciò significherebbe peggiore manutenibilità ma sarebbe facile da utilizzare con.
Esempio:
class CLabel: Label
{
public List<Control> RelatedControls {get; set;}
public String textHint;
// more stuff...
public CLabel()
{}
}
Opzione B: - Questa opzione significherebbe non la creazione di una classe derivata da ogni controllo, ma utilizzando l'etichetta reale, GroupBox, ecc controlli e la creazione di una classe che incapsula tutto il proprietà "extra". Questo oggetto proprietà aggiuntive verrebbe referenziato nella proprietà Control.Tag
. Ho dei dubbi su questo perché il riferimento a una specie di oggetto complesso all'interno della proprietà Tag
mi sembra un po 'schifoso, ma questo significherebbe una migliore maneggevolezza e ovviamente non c'è bisogno di controlli di sottoclasse.
Esempio:
Label lbl = new Label();
lbl.Tag = new ControlDescription();
Opzione C: - Ciò significherebbe avere una sorta di combinazione di opzione A e B. Basta creare il controllo personalizzato, ad esempio CLabel, che aggiunge un campo ControlDescription tipo al controllo Label. In questo modo garantiamo l'incapsulamento e la manutenibilità, ma evitiamo la cosa Tag
.
Sono sicuro che ci sono molte opzioni migliori di quelle. Probabilmente usando solo il polimorfismo - un concetto con cui ho ancora problemi - le classi di controllo personalizzate potrebbero essere portate via. Quale di queste opzioni pensi sia la migliore? Pensi che tutto questo potrebbe essere fatto meglio?
Grazie, darò un'occhiata anche a questo. –