rspec/rules/S3908/rule.adoc

79 lines
1.4 KiB
Plaintext
Raw Normal View History

2021-01-27 13:42:22 +01:00
Since .Net Framework version 2.0 it is not necessary to declare a delegate that specifies a class derived from ``++System.EventArgs++``. The ``++System.EventHandler<TEventArgs>++`` delegate mechanism should be used instead as it allows any class derived from ``++EventArgs++`` to be used with that handler.
2020-06-30 12:48:39 +02:00
2021-02-02 15:02:10 +01:00
2020-06-30 12:48:39 +02:00
This rule raises an issue when an old style delegate is used as an event handler.
== Noncompliant Code Example
----
public class MyEventArgs : EventArgs
{
}
public delegate void MyEventHandler(object sender, MyEventArgs e); // Noncompliant
public class EventProducer
{
public event MyEventHandler MyEvent;
protected virtual void OnMyEvent(MyEventArgs e)
{
if (MyEvent != null)
{
MyEvent(e);
}
}
}
public class EventConsumer
{
public EventConsumer(EventProducer producer)
{
producer.MyEvent += HandleEvent;
}
private void HandleEvent(object sender, MyEventArgs e)
{
// Do something...
}
}
----
== Compliant Solution
----
public class MyEventArgs : EventArgs
{
}
public class EventProducer
{
public event EventHandler<MyEventArgs> MyEvent;
protected virtual void OnMyEvent(MyEventArgs e)
{
if (MyEvent != null)
{
MyEvent(e);
}
}
}
public class EventConsumer
{
public EventConsumer(EventProducer producer)
{
producer.MyEvent += HandleEvent;
}
private void HandleEvent(object sender, MyEventArgs e)
{
// Do something...
}
}
----