c# - 事件默认初始化器

标签 c# events delegates initializer

我曾经使用以下内容:

public event EventHandler OnComplete = delegate { };

我不确定,这是怎么称呼的,这是“事件默认初始化程序”吗??

但问题似乎出在我派生自 EventArgs、创建我自己的 EventHandler 并决定使用相同的方法时。请参阅:

public class MyEventArgs : EventArgs
{
    int result;
    public int Result
    {
        get
        {
            if (exceptionObject == null)
                return result;
            else
                throw new InvalidOperationException();
        }
        internal set { result = value; }
    }

    Exception exceptionObject;
    public Exception ExceptionObject
    {
        get { return exceptionObject; }
        internal set { exceptionObject = value; }
    }
}

public delegate EventHandler MyEventHandler(object sender, MyEventArgs e);

public class MyOperation
{
    public event MyEventHandler OnOperationComplete = delegate { };
}

所以,这条线

public event MyEventHandler OnOperationComplete = delegate { };

导致问题。

如何为“我的”事件进行正确的默认初始化?

最佳答案

public event MyEventHandler OnOperationComplete = (sender, args) => { return null; };

我还认为你的意思是:

public delegate void MyEventHandler(object sender, MyEventArgs e);

不是

public delegate EventHandler MyEventHandler(object sender, MyEventArgs e);

关于c# - 事件默认初始化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680877/

相关文章:

c# - 搜索字符串并替换字符串的部分内容

c# - 使用 LINQ 连接列表

objective-c - 如何在不同的类中设置委托(delegate)

vb.net - 用于自动添加事件委托(delegate)方法的 Visual Studio 快捷方式

c# - 使用环境变量启动进程

c# - 在 LINQ 中获取所有 +ve 数

java - Java程序中多线程的使用和vs需要在EDT上创建Swing对象

javascript - 按钮单击事件在页面重新加载时触发

javascript - 从 Node.js(或其他)将事件附加到 MySQL

c# - 泛型委托(delegate)的问题