Nombre metodo como parametro

20/04/2006 - 16:27 por Catalin Lungu | Informe spam
Hola,
Quiero hacer lo siguiente.

public class A
{
public void M()
{
B b = new B();
b.Ejecuta(nMetodo);
}
public void nMetodo()
{
}
}

public class B
{
public B()
{}
public void Ejecuta(string nMetodo)
{
MiObjeto aaa = new MiObjeto();
aaa.Click += new EventHandler(nMetodo);
}
}

Bueno la ideea es sencilla pero no se como hacerlo. Quiero pasar el nombre
de un metodo, para que se ejecute cuando se desencadena el click del objeto
aaa.

Gracias de antemano,
C.

Preguntas similare

Leer las respuestas

#1 Jose Luis Manners
20/04/2006 - 17:07 | Informe spam
Necesitas usar reflexión. Aqui te muestro un ejemplo:

using System;
using System.Reflection;
class Prueba
{
string nombre;
Prueba(string nuevoNombre)
{
this.nombre = nuevoNombre;
}

public void MuestraNombre()
{
Console.WriteLine(nombre);
}

static void Main()
{
// Crea un objeto Prueba
Prueba p = new Prueba("SoyObjetoPrueba");

// Obtener el metodo que queremos llamar
MethodInfo mi = typeof(Prueba).GetMethod("MuestraNombre");

// Llamar el metodo en el objeto que creamos, sin argumentos
mi.Invoke (p, null);
}
}

Lo importante aqui es obtener un objeto tipo MethodInfo basado en el nombre
del método que queremos llamar (en este caso "MuestraNombre") y luego llamar
ese método usando la funcián Invoke.

Puedes conseguir información mas detallada sobre "Reflection" en el sitio de
MSDN:

http://msdn.microsoft.com/library/s...erview.asp

Coopera con el foro. Dinos si te sirvió la respuesta aquí planteada.

Saludos,

Jose Luis Manners
MCP, MCAD.NET, DCE5
http://www.josemanners.com/

"Debugging is twice as hard as writing the code in the first
place. Therefore, if you write the code as cleverly as
possible, you are, by definition, not smart enough to debug it."
-Brian W. Kernighan

"Catalin Lungu" wrote in message
news:e285pg$268$
Hola,
Quiero hacer lo siguiente.

public class A
{
public void M()
{
B b = new B();
b.Ejecuta(nMetodo);
}
public void nMetodo()
{
}
}

public class B
{
public B()
{}
public void Ejecuta(string nMetodo)
{
MiObjeto aaa = new MiObjeto();
aaa.Click += new EventHandler(nMetodo);
}
}

Bueno la ideea es sencilla pero no se como hacerlo. Quiero pasar el nombre
de un metodo, para que se ejecute cuando se desencadena el click del


objeto
aaa.

Gracias de antemano,
C.


Respuesta Responder a este mensaje
#2 Eduardo A. Morcillo [MS MVP VB]
20/04/2006 - 17:08 | Informe spam
Con Delegate.CreateDelegate puedes crear un delegado pasandole el objeto y
el nombre del metodo al que hara referencia el delegado. Luego de que lo
creas, lo agregas al evento:

class ManejaEventos {

public void ClickHandler(object sender, EventArgs e) {

MessageBox.Show("click");

}

}


EventHandler eh = (EventHandler)
Delegate.CreateDelegate(typeof(EventHandler), new ManejaEventos(),
"ClickHandler");
TextBox1.Click += eh;

Eduardo A. Morcillo [MS MVP VB]
http://www.mvps.org/emorcillo
http://mvp.support.microsoft.com/pr...4EF5A4191C
Respuesta Responder a este mensaje
#3 Catalin Lungu
21/04/2006 - 10:46 | Informe spam
Muchas gracias chicos. Los 2 modos son interesantes así que lo hice con
delegados. También lo hice pasando el EventHandler como parámetro pero no me
gusto demasiado.

Catalin.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida