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.