Spesso ci capita di dovere creare a Runtime gli oggetti sia per le applicazioni Windows che per quelle Web, e la cosa non è affatto difficile basta richiamare il costruttore New delloggetto di cui abbiamo bisogno.
Per esempio:
VB.NETC#Fin qui tutto ok, il problema nasce quando dobbiamo fargli fare qualcosa, ovvero associare una nostra funzione ai vari eventi delloggetto appena creato.
Il metodo standard è quello di dichiarare loggetto con la parola chiave
WhitEvents e poi usare la clausola
Handles in pratica è quello che fa Visual Studio .NET quando quando si inserisce un controllo tramite il Drag&Drop dalla casella degli strumenti, infatti se date unocchiata al codice generato, un bottone viene così definito :
VB.NETFriend WithEvents Button1 As System.Windows.Forms.Button
C#private System.Windows.Forms.Button button1;
E levento click così definito :
VB.NETPrivate Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
C#private void button1_Click(object sender, System.EventArgs e)
{
return;
}
Per fare tutto ciò a Runtime e creare dinamicamente un nostro gestore, dobbiamo per prima cosa definire una nostra routine
VB.NETPrivate Sub MyButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
End sub
C#private void MyButton_Click (object sender, System.EventArgs e)
{
return;
}
E importante che la Sub/Function definisca gli stessi parametri del metodo a cui si aggiunge levento.
Poi per aggiungere la nostra routine al metodo Click dobbiamo utilizzare
AddHandler per specificare il nome dellorigine dellevento e listruzione
AddressOf per specificare il gestore dellevento:
VB.NETDim btn as New Button
AddHandler btn.Click, AddressOff MyButton_Click
C#this.btn.Click += new System.EventHandler(this.MyButton_Click);
Allo stesso modo posso utilizzare listruzione
RemoveHandler per rimuovere la mia routine:
VB.NETRemoveHandler btn.Click, AddressOf MyButton_Click
C#this.btn.Click -= new System.EventHandler(this.MyButton_Click);
Conclusioni
Questo articolo può rendervi lidea di quanto possano essere dinamici gli oggetti e quanto noi possiamo intervenire sulla la loro vita questo è la bellezza della programmazione orientata agli oggetti
(Object Oriented Programmming)