Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

CSharp:Reflection

From Aino Wiki

Jump to: navigation, search

La Reflection è la possibilità di gestire codice (leggendo i metadati) al fine di trovare assembly, moduli, tipi in modo dinamico, runtime. Con la Reflection si è in grado di:

  • ottenere dettagli di un oggetto/metodo
  • creare oggetti, invocare metodi in esecuzione, dinamicamente.

Il namespace da usare è System.Reflection che contiene classi, interfacce e metodi necessari. Ad es. il metodo GetType() fornisce il modo di avere il tipo di un oggetto.

La Reflection mediante esempi

Argomento vasto ma indispensabile. E' sparso qua e là nel presente Wiki dedicato a C#, in questa sezione inizio a trattarlo in modo specifico ed in futuro in modo pragmatico. Seguono esempi di reflection organizzati per argomento.

Chiamare metodo mediante stringhe

Da stackoverflow
using System.Reflection;
...
private void BtnRun1_Click(object sender, EventArgs e)
{
	string commandString = string.Empty;
	Type thisType = this.GetType();
 
	commandString = "WriteInLabel";
	MethodInfo theMethod = thisType.GetMethod(commandString);
	//Non serve qui ma il seguente ci da informazioni sui parametri del metodo da invocare
        ParameterInfo[] parameterInfo = theMethod.GetParameters();
	object[] objUserParameters = new object[] { };
 
	theMethod.Invoke(this, objUserParameters);
}
 
public void WriteInLabel()
{
	LblTest1.Text = "Uno";
}

Altro modo più elegante.

T è la classe (Generica) a cui appartiene il metodo da invocare, attenzione alla Invoke, il secondo parametro 'null' potrà essere il parametro da passare al metodo:
using System.Reflection;
...
public void Invoke<T>(string methodName) where T : new()
{
    T instance = new T();
    MethodInfo method = typeof(T).GetMethod(methodName);
    method.Invoke(instance, null);
}

Esempio usando metodo con un parametro. Il parametro è passato mediante tipo object con new[] { "world" }:

public class Test
{
    public void Hello(string s) 
    { 
        Console.WriteLine("hello " + s); 
    }
}
 
...
 
{
     Test t = new Test();
     typeof(Test).GetMethod("Hello").Invoke(t, new[] { "world" }); 
 
     // alternative if you don't know the type of the object:
     t.GetType().GetMethod("Hello").Invoke(t, new[] { "world" }); 
}

C#


Visual Studio | Tips programmazione

Author