Events 具有事件属性的逆变换问题

Events 具有事件属性的逆变换问题,events,properties,c#-4.0,contravariance,Events,Properties,C# 4.0,Contravariance,假设我有一个简单的EventArgs子类: class MyArgs : EventArgs { } 考虑一下,我有两个包含事件的类: class MyData { public event EventHandler<MyArgs> Method; } class MyObject { public event EventHandler Method; } 多亏了逆变,MyMethod同时算作EventHandler和EventHandler。但是,如果我将My

假设我有一个简单的EventArgs子类:

class MyArgs : EventArgs { }
考虑一下,我有两个包含事件的类:

class MyData {
    public event EventHandler<MyArgs> Method;
}

class MyObject {
    public event EventHandler Method;
}
多亏了逆变,MyMethod同时算作EventHandler和EventHandler。但是,如果我将MyObject的事件处理程序更改为将方法转发给MyData的属性:

class MyObject {

    MyData data = new MyData();

    public event EventHandler Method {
        add { data.Method += value; }
        remove { data.Method += value; }
    }

}
事件属性无法将EventHandler转发给EventHandler。这对我来说似乎很奇怪,因为它似乎属于逆变类别——具有较弱签名(基类)的处理程序应该能够接受具有较强签名(子类)的参数


为什么不让我这么做?有没有办法通过事件属性将通用EventHandler向下隧道到EventHandler中?是否可以对代理执行某种类型的法律强制转换?

没有从
EventHandler
EventHandler
的隐式转换。但是,由于两者都是相互兼容的类型,您可以将
EventHandler
传递给构造函数以“转换”它

公共事件事件处理程序方法
{
添加{data.Method+=neweventhandler(value);}
删除{data.Method-=neweventhandler(value);}
}

嗯-我没想到。我没有意识到它在那里使用隐式转换-谢谢!
class MyObject {

    MyData data = new MyData();

    public event EventHandler Method {
        add { data.Method += value; }
        remove { data.Method += value; }
    }

}
public event EventHandler Method
{
    add { data.Method += new EventHandler<MyArgs>(value); }
    remove { data.Method -= new EventHandler<MyArgs>(value); }
}