Home Page Home Page Tips & Tricks Invocare un metodo tramite Reflection .NET

Invocare un metodo tramite Reflection .NET


In un precedente Tip abbiamo già visto come funziona il sistema di Reflection, in questo Tip vedremo come richiamare un metodo da una classe ad un’altra utilizzando la classe Methodinfo.

Come esempio useremo questa semplice classe utente che ha due proprietà e due metodi con un metodo che ha due parametri di input e uno nessuno parametro:

Codice .NET n°1
namespace Test
{
public class Utente
{
private string _nome;
public string Nome
{
get
{
return _nome;
}
set
{
_nome = value;
}
}
private string _cognome;
public string Cognome
{
get
{
return _cognome;
}
set
{
_cognome = value;
}
}
public Utente()
{
}
public void GetNominativo(string nome, string cognome)
{
Console.WriteLine("Cognome {0} Nome{1}",this.Cognome,this.Cognome);
Console.ReadLine();
}
public void ScriviCiaoCommunity()
{
Console.WriteLine("Ciao Community");
}

} // end class - Utente

} // end namespace


Ora da un'altra classe richiamiamo il primo metodo passando i due parametri:
Come prima cosa bisogna importare il namespace della Reflection System.Reflection.

C#
Codice .NET n°2
Utente utente = new Utente();
Type typeUtente = utente.GetType();
MethodInfo method = typeUtente.GetMethod("GetNominativo",BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase);
method.Invoke(utente,new object[]{"Marco","Caruso"});


VB.NET
Codice .NET n°3
Dim utente as New Utente()
Dim typeUtente as Type = utente.GetType();
Dim method as MethodInfo = typeUtente.GetMethod("GetNominativo",BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.IgnoreCase)
method.Invoke(utente,new object[]{"Marco","Caruso"});


Analizziamo il codice:
Come prima cosa instanzio la classe dove è inserito il metodo, poi recupero il Type della classe.

Il metodo "GetMethod" della classe System.Type accetta come parametri:
• Il nome del parametro
• Gli attributi che consentono di specificare le modalità d’esecuzione della ricerca che sono rappresentati dall’enumerazione BindingFlags

Nel nostro caso abbiamo detto alla reflection di cercare i metodi che fanno parte dell’instanza(BindingFlags.Instance), i metodo dichiarati come public e di ignorare la differenza tra maiuscole e minuscole(BindingFlags.IgnoreCase)

Infine tramite Invoke abbiamo richiamato il metodo, dicendogli chi è il proprietario e i parametri che devono essere passati come array di object.
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5