Events 具有事件属性的逆变换问题
假设我有一个简单的EventArgs子类: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
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); }
}