21/05/09 18:25
Il Totem
Rileggendo il topic mi è sorto un dubbio. Tutti i form che sono passati come parametro al metodo mostra sono diversi e progettati indipendentemente nell'editor? Se lo sono, ed espongono sempre gli stessi metodi e gli stessi controlli, perchè non crei un'interfaccia che possa essere implementata da questi?
totem.altervista.org/guida/versione2/…
Usando un'interfaccia non c'è il problema dell'ereditarietà, che può influire negativamente sul designer (praticamente l'unico caso in cui l'ereditarietà può essere dannosa), ma se ne possono usare gli stessi principi. Se Form2, Form3, Form4, ..., FormN hanno tutti gli stessi membri, implementaranno tutti questa interfaccia, ad esempio IForm:
E il codice sarà:
La collezione Controls esiste perchè contiene i controlli del form, i quali sono sempre aggiunti dinamicamente: dichiarare un controllo come membro della classe derivata da form, infatti, non basta a farlo apparire nella visualizzazione. Le variabili, invece, sono puro codice, sono membri effettivi della classe ed esistono solo nel suo contesto: essendo determinate prima dell'esecuzione, sono a tutti gli effetti statiche. Ecco perchè non può esistere una collezione Variables analoga a Controls. Le si può ottenere con la reflection (e solo quelle con scope pubblico o friend), ma credo che la soluzione basata sulle interfacce risolverà il tuo problema.
totem.altervista.org/guida/versione2/…
Usando un'interfaccia non c'è il problema dell'ereditarietà, che può influire negativamente sul designer (praticamente l'unico caso in cui l'ereditarietà può essere dannosa), ma se ne possono usare gli stessi principi. Se Form2, Form3, Form4, ..., FormN hanno tutti gli stessi membri, implementaranno tutti questa interfaccia, ad esempio IForm:
Class Form2 Implements IForm '...
E il codice sarà:
Sub mostra(ByVal F As IForm) S.Salva("a") S.Variabile = True '... End Sub
La collezione Controls esiste perchè contiene i controlli del form, i quali sono sempre aggiunti dinamicamente: dichiarare un controllo come membro della classe derivata da form, infatti, non basta a farlo apparire nella visualizzazione. Le variabili, invece, sono puro codice, sono membri effettivi della classe ed esistono solo nel suo contesto: essendo determinate prima dell'esecuzione, sono a tutti gli effetti statiche. Ecco perchè non può esistere una collezione Variables analoga a Controls. Le si può ottenere con la reflection (e solo quelle con scope pubblico o friend), ma credo che la soluzione basata sulle interfacce risolverà il tuo problema.
aaa