L'uso dei delegates con ASP.NET

Andrea Zani

di Andrea Zani, in ASP.NET,

Archiviato in: ,

Se dovessi spiegare, nel modo più breve possibile, "a che servono i delegate", direi all'incirca: "I delegate permettono di chiamare funzioni referenziate in run-time nel nostro codice...". Probabilmente questa spiegazione non dirà molto a chi è digiuno in materia, ma con un esempio del loro utilizzo in una web application il contetto risulterà più chiaro:

C# 
namespace Esempio 
{ 
  public Esempio_Delegate string Funzione(string nome); 
 
  public class Classe2 
  { 
   public Funzionexfunzione; 
   public void InviaSaluto() 
   { 
     HttpContext.Current.Response.Write(xfunzione("Andrea")); 
   } 
  } 
 
  public class Delegate : System.Web.UI.Page 
  { 
   private void Page_Load(object sender, System.EventArgs e) 
   { 
     Classe2 classe=new Classe2(); 
     classe.xfunzione=new Funzione(this.Saluto); 
     classe.InviaSaluto(); 
   } 
 
   public string Saluto(string nome) 
   { 
     return "Ciao "+nome; 
   } 
  } 
}
VB 
Public Delegate Function Funzione(ByVal nome As String) As String 
 
Public Class Classe2 
  Public xfunzione As Funzione 
  Sub ScriviSaluto() 
 
  
HttpContext.Current.Response.Write(xfunzione("Andrea")) 
  End Sub 
End Class 
 
Public Class Esempio_Delegate 
  Inherits System.Web.UI.Page 
 
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 
   Dim classe As New Classe2 
   classe.xfunzione = New Funzione(AddressOf Me.Saluto) 
   classe.ScriviSaluto() 
  End Sub 
 
  Public Function Saluto(ByVal nome As String) As String 
   Return "Ciao " + nome 
  End Function 
End Class

In entrambi i linguaggi, viene definito il delegate al di fuori delle classi in modo che esso abbia visibilità globale:

public delegate string Funzione(string nome);

Esso deve avere la stessa signature della funzione che vogliamo possa essere referenziata, nel nostro esempio Saluto, posta all'interno della classe principale della pagina:

public string Saluto(string nome) 
{ 
  return "Ciao "+nome; 
}

Per referenziare questa funzione abbiamo utilizzato questo codice:

Classe2 classe=new Classe2(); 
classe.xfunzione=new Funzione(this.Saluto); 
classe.InviaSaluto();

Nella prima riga abbiamo istanziato una nuova classe. Nella seconda andiamo ad inserire nel delegate il riferimento alla funzione che vogliamo possa essere richiamata da questa classe. Nella terza e ultima riga di codice andremo a richiamare la funzione "InviaSaluto":

public void InviaSaluto() 
{ 
  HttpContext.Current.Response.Write(xfunzione("Andrea")); 
}

Quest'ultima richiama per riferimento la funzione "Saluto" passandogli come parametro il nome "Andrea" e restituendo a video "Ciao Andrea".

Nei delegate possiamo naturalmente referenziare anche funzioni statiche. Se "classe2" avesse avuto come membro statico la funzione "InviaSaluto", nel nostro codice sarebbe cambiato poco:

 C# 
public class Classe2 
{ 
  public Funzione xfunzione; 
  static public void InviaSaluto() 
  { 
   HttpContext.Current.Response.Write(xfunzione("Andrea")); 
  } 
} 
... 
private void Page_Load(object sender, System.EventArgs e) 
{ 
  Classe2.xfunzione=new Funzione(this.Saluto); 
  Classe2.InviaSaluto(); 
} 
VB 
Public Class Classe2 
  Public xfunzione As Funzione 
  Shared Sub ScriviSaluto() 
   HttpContext.Current.Response.Write(xfunzione("Andrea")) 
  End Sub 
... 
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) 
  Classe2.xfunzione = New Funzione(AddressOf Me.Saluto) 
  Classe2.ScriviSaluto() 
End Sub

Attenzione: Questo articolo contiene un allegato.

Contenuti dell'articolo

Commenti

L'uso dei delegates con ASP.NET 7 10 9 2

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Segnala su:  Facebook  Messenger  Twitter       Leggi dopo |

Approfondimeti

TUTORIALS
TOP TEN ARTICOLI
ARTICOLI VIA E-EMAIL

Iscriviti alla nostra newsletter nuoviarticoli per ricevere via e-mail le notifiche!

Iscrivi subito! »»»

PROVIDER ASP.NET

Seleziona il tuo provider per avere il web.config pronto per Membership, Roles e Profile API.

MEDIA
IN EVIDENZA
MISC