知道方法名称,怎么得到方法
假设我定义了一个方法
Class A
{
private void method1(Object sender, EventArgs e)
{
............;
}
}
这时我知道了此方法的名称为 mehtod1,这时我生成一个按钮button1,并把按钮的Click与这个方法绑定。当然写法应该是
button1.click+=new EventHandler(method1);
有没有办法绕开一下,也即,写一个函数可以通过方法名称得到方法本身,如getMethod( "方法名称 ")??
------解决方案--------------------用反射??
------解决方案--------------------只有反射了
------解决方案--------------------参见
http://blog.csdn.net/tjvictor/archive/2007/01/24/1492079.aspx
------解决方案--------------------//比我想象的简单一些,参考如下代码:
EventInfo vEventInfo = typeof(Button).GetEvent( "Click ");
vEventInfo.AddEventHandler(button1,
Delegate.CreateDelegate(vEventInfo.EventHandlerType, this, "method1 "));
------解决方案--------------------学习,经验证正确,顶ls的
namespace KnowFuncName
{
public partial class Form1 : Form
{
private System.Windows.Forms.Button button1;
public Form1()
{
InitializeComponent();
this.button1 = new System.Windows.Forms.Button();
this.Controls.Add(this.button1);
EventInfo vEventInfo = typeof(Button).GetEvent( "Click ");
vEventInfo.AddEventHandler(button1,
Delegate.CreateDelegate(vEventInfo.EventHandlerType, this, "method1 "));
}
private void method1(object sender, EventArgs e)
{
MessageBox.Show( "sdfsdf ");
}
}
}
------解决方案--------------------反射,用Invoke方法取
------解决方案--------------------可以用反射,不过为什么要这样做呢?我猜你是要运行时绑定事件吧,但事实上大多数需要运行时绑定事件的情形,都有别的方法解决。
------解决方案--------------------Up
------解决方案--------------------只能用反射了。不过不太明白楼主为什么要这样做。
非常同意楼上的观点。
基本上很多运行时绑定的事件,都可以改成其它形式。
有很多时候一个很难的问题,换一个思路就变成很简单的问题了。楼主你可以换个思路想想。
------解决方案--------------------如果是实例方法,事件应该绑定到哪个实例的方法上呢?如果要绑定到所有的实例上,你又怎么遍历所有的实例,并知道有新的实例被创建?
------解决方案--------------------up
------解决方案--------------------方法 与 事件 的 关联?
给你个 列子 (楼主应该 好好看看 委托的 概念)
建立一个 控制台程序看看 下面的:)
using System;
namespace ConsoleApplication1
{
public delegate void MyDelegate();
public interface I
{
event MyDelegate MyEvent;
void FireAway();
}
public class MyClass:I
{
public event MyDelegate MyEvent;
public void FireAway()
{
if(MyEvent!=null)
MyEvent();
else
Console.WriteLine( "MyEvent failed! ");
}
}
public class MainClass
{
static private void f()
{
Console.WriteLine( "F is called ..................... ");
return;
}
static private void fl()