Associare una funzione a un delegato in maniera dinamica

sabato 01 novembre 2014 - 21.17
Tag Elenco Tags  C#  |  .NET 3.5  |  Windows 7  |  Visual Studio 2008  |  SQL Server 2008  |  Internet explorer 8.0  |  Javascript  |  CSS 3.0  |  HTML 4.01

kduhcm Profilo | Junior Member

Ciao ragazzi,
sto cercando di trovare un modo per associare la funzione a un delegato in maniera dinamica.
Mi spiego:
questa e' la procedura classica

public delegate bool Check(Studente studente);
...
Check check2 = isMaggiorenne; // il delegato punta alla funzione isMaggiorenne

invece io vorrei passare la funzione isMaggiorenne in una stringa, perche' ad esempio potrei volerla mettere come commandargument in un bottone.
esempio:
string nomeFunzione = "isMaggiorenne";
Check check2 = nomeFunzione; // <-- errore di compilazione

Come posso fare?

-----------------------------------------------------------------------------------------------------------------------
Sviluppo siti web Roma http://www.actasoftware.com

0v3rCl0ck Profilo | Guru

Ciao Carlo,

è possibile farlo, ma sfruttando le reflection di .net. In pratica .net quando compila il codice c# in linguaggio intermedio IL, salva con se anche tutta una serie di metadati legati alla struttura delle classi, in questo modo è possibile fare questo tipo di cose, senza dovere fare logiche condizionali, ma semplicemente dato un nome della funzione, richiamarla a runtime:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra



Michael Denny | Microsoft Visual C# MVP
http://blogs.dotnethell.it/Regulator/
http://dennymichael.net
http://mvp.microsoft.com/mvp/Michael%20Denny-5000735
Twitter: @dennymic
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5