日期:2014-05-20  浏览次数:20694 次

知道方法名称,怎么得到方法
假设我定义了一个方法
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()