Skip to content

Gendarme.Rules.Design.PreferEventsOverMethodsRule(git)

Sebastien Pouliot edited this page Mar 2, 2011 · 1 revision

PreferEventsOverMethodsRule

Assembly: Gendarme.Rules.Design
Version: git

Description

This rule checks for method names that suggest they are providing similar functionality to .NET events. When possible the method(s) should be replaced with a real event. If the methods are not using or providing event-like features then they should be renamed since such names can confuse consumers about what the method is really doing.

Examples

Bad example:

public delegate void MouseUpCallback (int x, int y, MouseButtons buttons);
public class MouseController {
    private MouseUpCallback mouse_up_callback;
    public void RaiseMouseUp (Message msg)
    {
        if (mouse_up_callback != null) {
            mouse_up_callback (msg.X, msg.Y, msg.Buttons);
        }
    }
    public void ProcessMessage (Message msg)
    {
        switch (msg.Id) {
            case MessageId.MouseUp: {
                RaiseMouseUp (msg);
                break;
            }
            // ... more ...
            default:
            break;
        }
    }
}

Good example:

public class MouseController {
    public event EventHandler<MessageEvent> MouseUp;
    public void ProcessMessage (Message msg)
    {
        switch (msg.Id) {
            case MessageId.MouseUp: {
                EventHandler<MessageEvent> handler = MouseUp;
                if (handler != null) {
                    handler (new MessageEvent (msg));
                }
                break;
            }
            // ... more ...
            default:
            break;
        }
    }
}

Source code

You can browse the latest source code of this rule on github.com

Clone this wiki locally