An interesting idea, I never thought about it. The way I do my own events is to make OnCustomEventName, taking the parameters for the event, and just check there for null. and call OnCustomEventName from the code wherever I want the event to be raised. Avoids any performance gains and keeps the opcode cleaner than 2-line if you check every time you want the event to fire.
Considering that this does not answer the question about technical flaws, but is more suitable for competitions.
code sample for threadsafe "On" function.
private void OnCustomEventName() { DelegateName localhandler = CustomEventName; if (localhandler != null) localhandler(); }
source share