Question: I have a class `Character`, that stores 3 `CharacterAttribute` classes. What I want is that at a certain point `Character` would do something if an event is raised within one of the `CharacterAttribute` classes.

```
class Character
{
    public CharacterAttribute Physical;

    public Character Create(...) 
    {
        Physical = new CharacterAttribute();
        Physical.SkillPointGained += this.OnSkillPointGained(); 
        // ERROR: cannot convert void to System.EventHandler
    }

    public void OnSkillPointGained()
    {
        // do stuff here after the event has been fired
    }
}

class CharacterAttribute
{
    public event EventHandler SkillPointGained;

    public void GainExperience(...)
    {
        SkillPointGained(this, new EventArgs()); // would raise the event here
    }
}

```

I get a "cannot implicitly convert void to System.EventHandler" error. What am I missing?

Answer: 
Two lines of code need to be fixed up a little bit.

```
public void OnSkillPointGained()

```

should read:

```
void OnSkillPointGained(object sender, EventArgs e)

```

And

```
Physical.SkillPointGained += this.OnSkillPointGained();

```

Should read:

```
Physical.SkillPointGained += this.OnSkillPointGained; 

```

(...however I like the elegance of Marc's answer better.)
`EventHandler` has the delegate signature of `void EventHandler(object sender, EventArgs args)`. You are a: matching the wrong signature, and b: you're *invoking* the method rather than targeting the method as a delegate.

You can cheat, though:

```
Physical.SkillPointGained += delegate { this.OnSkillPointGained(); };

```

This creates an anonymous method that acts as the immediate handler, *drops* the sender/args, and invokes your `OnSkillPointGained` method.