Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 按名称获取EventHandler?_String_Events_Handler - Fatal编程技术网

String 按名称获取EventHandler?

String 按名称获取EventHandler?,string,events,handler,String,Events,Handler,如果有另一个问题可以解释这一点,我很抱歉找不到它,但我认为这可能与我对我正在尝试做的事情所涉及的一些术语不熟悉有关 我试图做的是按名称向按钮添加eventhandler。例如,在下面的代码中,我不知道我想添加showInfo,我可以通过名称(字符串)引用EventHandler,比如“showInfo”吗 您可以通过反射从方法创建委托,然后通过反射将其订阅到事件,是的。示例代码: using System; using System.Reflection; class Publisher {

如果有另一个问题可以解释这一点,我很抱歉找不到它,但我认为这可能与我对我正在尝试做的事情所涉及的一些术语不熟悉有关

我试图做的是按名称向按钮添加eventhandler。例如,在下面的代码中,我不知道我想添加showInfo,我可以通过名称(字符串)引用EventHandler,比如“showInfo”吗


您可以通过反射从方法创建委托,然后通过反射将其订阅到事件,是的。示例代码:

using System;
using System.Reflection;

class Publisher
{
    public event EventHandler Foo;

    public void RaiseFoo()
    {
        EventHandler handler = Foo;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
}

class Subscriber
{
    public void HandleEvent(object sender, EventArgs e)
    {
        Console.WriteLine("In HandleEvent");
    }
}

class Test
{
    static void Main()
    {
        var subscriber = new Subscriber();
        var publisher = new Publisher();

        var methodInfo = typeof(Subscriber).GetMethod("HandleEvent");
        var handler = (EventHandler) Delegate.CreateDelegate(
               typeof(EventHandler), subscriber, methodInfo);

        var eventInfo = typeof(Publisher).GetEvent("Foo");
        eventInfo.AddEventHandler(publisher, handler);

        publisher.RaiseFoo();
    }    
}
using System;
using System.Reflection;

class Publisher
{
    public event EventHandler Foo;

    public void RaiseFoo()
    {
        EventHandler handler = Foo;
        if (handler != null)
        {
            handler(this, EventArgs.Empty);
        }
    }
}

class Subscriber
{
    public void HandleEvent(object sender, EventArgs e)
    {
        Console.WriteLine("In HandleEvent");
    }
}

class Test
{
    static void Main()
    {
        var subscriber = new Subscriber();
        var publisher = new Publisher();

        var methodInfo = typeof(Subscriber).GetMethod("HandleEvent");
        var handler = (EventHandler) Delegate.CreateDelegate(
               typeof(EventHandler), subscriber, methodInfo);

        var eventInfo = typeof(Publisher).GetEvent("Foo");
        eventInfo.AddEventHandler(publisher, handler);

        publisher.RaiseFoo();
    }    
}