首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

知道方法名称,如何得到方法

2011-12-23 
知道方法名称,怎么得到方法假设我定义了一个方法ClassA{privatevoidmethod1(Objectsender,EventArgse){...

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


{
Console.WriteLine( "FL is called ..................... ");
Console.ReadLine();
return;
}
static public void Main()
{
/*
* 可以使用接口定义!
I iMy;
iMy=new MyClass();
iMy.FireAway();
iMy.MyEvent +=new MyDelegate(f);
iMy.MyEvent +=new MyDelegate(fl);
iMy.FireAway();
*/

MyClass i=new MyClass();
i.FireAway();
i.MyEvent +=new MyDelegate(f);
i.MyEvent +=new MyDelegate(fl);
i.FireAway();

}
}
}
[解决办法]
不用反射也可以
你在click_handler里面处理 不绑定不同的方法 就绑定一个方法

然后在里面根据条件判断不行吗?
[解决办法]
up
[解决办法]
委托!

热点排行