【问题标题】:How Do I Pass A Method Reference to A Different Method in C#如何在 C# 中将方法引用传递给不同的方法
【发布时间】:2009-01-05 22:31:57
【问题描述】:

我想将一个方法的引用传递给另一个方法并将其存储为变量。稍后,我想用这个引用来定义一个事件处理程序。

在创建事件处理程序时,方法引用的传递方式如下:

myButton.Click += new RoutedEventHandler(myButton_Click);

如果你从 intelliSense 中查看“RoutedEventHandler”的构造函数,它看起来像:

RoutedEventHandler(void(object, RoutedEventArgs))

我想做的是将方法“myButton_Click”传递给不同的静态方法,然后在那里创建一个事件处理程序。如何将引用传递给静态方法?我尝试了以下方法,但无法编译:

public class EventBuilder
{
    private static void(object, RoutedEventArgs) _buttonClickHandler;

    public static void EventBuilder(void(object, RoutedEventArgs) buttonClickHandler)
    {
        _buttonClickHandler = buttonClickHandler;
    }

    public static void EnableClickEvent()
    {
        myButton.Click += new RoutedEventHandler(_buttonClickHandler);
    }
}

谢谢, 本

【问题讨论】:

    标签: c# wpf events reference methods


    【解决方案1】:

    要引用方法引用(在 .NET 中称为 delegate),请使用处理程序名称,而不是签名。

    public class EventBuilder
    {
        private static RoutedEventHandler _buttonClickHandler;
    
        public EventBuilder(RoutedEventHandler buttonClickHandler)
        {
            _buttonClickHandler = buttonClickHandler;
        }
    
        public static void EnableClickEvent()
        {
            myButton.Click += new RoutedEventHandler(_buttonClickHandler);
        }
    }
    

    【讨论】:

    • 如果 _buttonClickHandler 已经是一个 RoutedEventHandler,我不应该像 myButton.Click += _buttonClickHandler 一样设置它吗?
    • 是的,没错。即使在一般用法中,您也可以省略“new EventHandler(...)”语法;即 myButton.Click += myButton_Click;本身是有效的。
    【解决方案2】:

    试试

    private static delegate void(object sender, RoutedEventArgs e) _buttonClickHandler;
    

    【讨论】:

      猜你喜欢
      • 2012-11-07
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 1970-01-01
      相关资源
      最近更新 更多