c# - EventHandler Not Needed in Event? -


i noticed while using ping class. followed c#'s documentation when implementing pingcompleted callback method:

pingsender.pingcompleted += new pingcompletedeventhandler(pingcompletedcallback); 

however, when adding new method timer's elapsed event, noticed wasn't passing new timerelapsedeventhandler. instead, passing function name is:

customtimer.elapsed += customtimerelapsedcallback; 

i tested out pingcompleted event , still works:

pingsender.pingcompleted += pingcompletedcallback; 

i couldn't find source explains why is. can explain why allowed , eventhandler calls does?

this handled c# compiler you. feature added in c# 2.0 (see section on "how to: declare, instantiate, , use delegate").

the c# language spec, section 6.6, states:

an implicit conversion (§6.1) exists method group (§7.1) compatible delegate type. given delegate type d , expression e classified method group, implicit conversion exists e d if e contains @ least 1 method applicable in normal form (§7.5.3.1) argument list constructed use of parameter types , modifiers of d

basically, can use name of method in code (which "method group", in case, customtimerelapsedcallback or pingcompletedcallback), , compiler see delegate type required, , put in logic conversion you.

the resulting generated il pingsender.pingcompleted += pingcompletedcallback; , pingsender.pingcompleted += new pingcompletedeventhandler(pingcompletedcallback); same result.