如果我有一個引發事件的類,使用(例如)FrobbingEventArgs,我可以用一個接受EventArgs的方法來處理它嗎?在C#中,是否事件處理函數參數是逆變?
下面是一些代碼:
class Program
{
static void Main(string[] args)
{
Frobber frobber = new Frobber();
frobber.Frobbing += FrobberOnFrobbing;
frobber.Frob();
}
private static void FrobberOnFrobbing(object sender,
EventArgs e)
{
// Do something interesting. Note that the parameter is 'EventArgs'.
}
}
internal class Frobber
{
public event EventHandler<FrobbingEventArgs> Frobbing;
public event EventHandler<FrobbedEventArgs> Frobbed;
public void Frob()
{
OnFrobbing();
// Frob.
OnFrobbed();
}
private void OnFrobbing()
{
var handler = Frobbing;
if (handler != null)
handler(this, new FrobbingEventArgs());
}
private void OnFrobbed()
{
var handler = Frobbed;
if (handler != null)
handler(this, new FrobbedEventArgs());
}
}
internal class FrobbedEventArgs : EventArgs { }
internal class FrobbingEventArgs : EventArgs { }
我想問的原因是,ReSharper的,似乎有一個問題(什麼樣子)等效於XAML,我想知道,如果它是一個錯誤的ReSharper的,或者我對C#的理解錯誤。
這是frobnication的一個很好的例子:) – 2010-05-14 10:49:46