1 / 21

13. Delegates & events

13. Delegates & events. Observer pattern Delegates Semantics Cil – kode Anvendelse Events. Observer pattern. Also called Observable in some litterature. Might also be a interface. Callback interfaces. Interfaces describes a common behavior that is shared by different classes

aulii
Download Presentation

13. Delegates & events

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 13. Delegates & events • Observer pattern • Delegates • Semantics • Cil – kode • Anvendelse • Events

  2. Observer pattern Also called Observable in some litterature Might also be a interface

  3. Callback interfaces • Interfaces describes a common behavior that is shared by different classes • Used in Observer pattern to construct a callback mecanism • The key is the Update() method in the Observer interface. • Note that it do not have to be named Update ;-) • Callback can be used in languages that supports interfaces • Callback can be implemented with function pointers in C(But then it is not by using observer pattern)

  4. Subject (or Observable) implements an add and a remove method to add and remove observers to/from an internal container (typical an arraylist) • Has also a notify() method that calls update() on all observer object in the container • Observer implements the update() method. • That will be the event handler in an event based system

  5. Delegate • Delegate is a new language construction in C# • Java programmers will compare it to observer pattern • C/C++, Pascal/Delphi… programmers will compare it to function pointers • A delegate gives the possibility to pass a method of a class as a parameter to objects of another class. The method can be a static or an instance method • Delegates are object oriented, typesafe and undependent of method name. • Delegates are objects itselves of classes that iniherit from System.Delegate via System.MulticastDelegate

  6. 4 steps to create and use delegates • Declare a delegate with an appropiate signature • Define method(s) with the same signature • Instansiate a delegate object with a method as parameterThe method will be encapsulated in the delegate • Call the method by the delegate

  7. Step 1: • Declare a delegate with an appropiate signature.That means with the same parameters and return values as the method to be encapsulated delegate void Notifier(string sender);

  8. Step 2: • Define method with the same signature as the delegate void SayHello (string sender) { Console.WriteLine("Hello from "+ sender); } void SayGoodBye (string sender) { Console.WriteLine("Good Bye from "+ sender); }

  9. Step 3: • Instanstiate the delegate object and add the methods • Note: Static methods might be used as well. HelloGoodbye MyObject=new HelloGoodbye(); //Instanstiate delegate and thereby a container Notifier notify = new Notifier(MyObject.SayHello); //Add a new Notifier to the container (multicast); notify += new Notifier(MyObject.SayGoodBye); //For the example: remove Notifier: notify -= new Notifier(SayHello);

  10. Trin 4: • Call the methods via the delegate: notify ("Pingo");

  11. Demo • Incl. ildasm

  12. Events • Delegates are often used for event based systems • The Event keyword in C# makes it little easier • The mecanism behind is the same. A event is a kind of delegate. • Events are often used in object oriented gui programs • Events can be used with advantage in other areas such as simulation and realtime systems.

  13. Gui demo • To see the use of event handlers

  14. Events (not gui) • Declare a delegate with an appropriate signature • Declare the events a class can send • Define event handlers (methods) • Associate event and eventhandler • Trigger event by calling event handler by the event name.

  15. Step 1: • Declare a delegate with an appropriate signature delegate void GreetingHandler(string sender);

  16. Trin 3: • Declare the events a class can send. • Events are members in the class they are generated from public static event GreetingHander Hello; public static event GreetingHander GoodBye;

  17. Step 3: • Define methods with the same signature as the delegate void OnHello (string sender) { Console.WriteLine("Hello from "+ sender); } void OnGoodBye (string sender) { Console.WriteLine("Good Bye from "+ sender); }

  18. Trin 4: • Instanstiate the delegate object and add the methods that shall be called MinKlasse.Hello+=new MinKlasse.GreetingHandler(OnHello); MinKlasse.GoodBye+=new MinKlasse.GreetingHandler(OnGoodBye); Event name in the class Delegate name in the class Event handler (method to be called)

  19. Step 5: • Call the methods by the event name: // Somewhere in a class.. if(Hello != null) //Be sure there is an eventhandler { Hello("Pingo"); }

  20. What is the difference between delegate and event? • Fromhttp://en.csharp-online.net/CSharp_FAQ:_What_is_the_difference_between_delegate_and_event • An event offers more restricted access than a delegate. When an event is public, other classes are only able to add or remove handlers for that event: such classes cannot—necessarily—fire the event, locate all the handlers for it, or remove handlers of which they are unaware..

More Related