Események C#-ban Krizsán Zoltán iit



Hasonló dokumentumok
C# osztályok. Krizsán Zoltán

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Delegátumok C#-ban Krizsán Zoltán iit

Objektumorientált programozás C# nyelven

Programozás II. labor

Access adatbázis elérése OLE DB-n keresztül

Bánsághi Anna

Származtatási mechanizmus a C++ nyelvben

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

BME MOGI Gépészeti informatika 8.

Objektumorientált programozás C# nyelven

Osztály és objektum fogalma

Osztályok. 4. gyakorlat

OOP: Java 8.Gy: Abstract osztályok, interfészek

Java és web programozás

OAF Gregorics Tibor: Minta dokumentáció a 3. házi feladathoz 1.

C#, OOP. Osztályok tervezése C#-ban

4. Öröklődés. Programozás II

Elemi Alkalmazások Fejlesztése II.

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

SDI ALKALMAZÁS I. Workspace / ResourceView / Toolbar / IDR_MAINFRAME. Workspace / ResourceView / Menu / IDR_MAINFRAME

Objektumok inicializálása

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Pénzügyi algoritmusok

Programozás BMEKOKAA146. Dr. Bécsi Tamás 1. Előadás

Java programozási nyelv 4. rész Osztályok II.

Java és web programozás

OOP: Java 8.Gy: Gyakorlás

Bánsághi Anna

Objektumorientált programozás C# nyelven

ASP.NET 2.0 (Whidbey)

Java és web programozás

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

JAVA PROGRAMOZÁS 3.ELŐADÁS

117. AA Megoldó Alfréd AA 117.

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Programozás II gyakorlat. 4. Öröklődés

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozási nyelvek II.: JAVA, 3. gyakorlat

Programozás II. ATM példa Dr. Iványi Péter

SZERVER OLDALI JAVASCRIPT. 3. hét Javascript nyelvi elemek

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Java IX. telkezelés a Java-ban

Emlékeztető: a fordítás lépései. Szimbólumtábla-kezelés. Információáramlás. Információáramlás. Információáramlás.

Java programozási nyelv 5. rész Osztályok III.

Java IX. telkezelés a Java-ban

OOP #14 (referencia-elv)

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás

List<String> l1 = new ArrayList<String>(); List<Object> l2 = l1; // error

II. Programozási technológiák

Objektumorientált programozás C# nyelven

Programozás I. Első ZH segédlet

Grafikus felületek a programozó szempontjából grafikus elemek absztrakt reprezentációja az egyes elemek tulajdonságait leíró adatstruktúrák.

C# osztálydeníció. Krizsán Zoltán 1. .net C# technológiák tananyag objektum orientált programozás tananyag

Objektumorientált programozás C# nyelven III.

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Programozási Paradigmák és Technikák

Programozás II gyakorlat. 8. Operátor túlterhelés

Eseménykezelés - Lottó játék

Vizuális programozás gyakorlat

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási nyelvek II.: JAVA, 4. gyakorlat

JAVA PROGRAMOZÁS 2.ELŐADÁS

C++ programozási nyelv

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

BME MOGI Gépészeti informatika 4.

Kalapácsvetés 2016 szöveges

Globális operátor overloading

OOP: Java 5.Gy: Osztály, referencia, konstruktor

Programozási nyelvek II.: JAVA, 4. gyakorlat

Programozás C++ -ban 2007/4

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

7. K: JAVA alapok Konzultáció

500. DD Megoldó Alfréd DD 500.

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010


3

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

BME MOGI Gépészeti informatika 7.

Generikus Típusok, Kollekciók

Egy dinamikus adatbázis megvalósítása egy megrendelő-raktározó alkalmazáson keresztül.

Programozás alapjai II. (9. ea) C++ többszörös öröklés, cast, perzisztencia

Programozás BMEKOKAA146. Dr. Bécsi Tamás 7. előadás

Programozási nyelvek Java

Öröklés és Polimorfizmus

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

A Microsoft Visual Studio 2005 fejlesztőkörnyezet

VB C++ C# JScript J# Common Language Specification. ADO.NET and XML. Base Class Library. Common Language Runtime. Operating System

Szoftvertechnolo gia gyakorlat

Objektumorientált programozás IX. Osztályok, objektumok

Átírás:

Krizsán Zoltán

Mi az? Aszinkron törtt rténésről értesítés s egy vagy több t objektum számára. Delegátumok segíts tségével valósítja meg a C#. 2

Lehetőségek 1. Egy objektum bejelentheti érdeklődését egy esemény iránt 2. Egy objektum visszavonhatja érdeklődését egy esemény iránt 3. Egy objektum eseményt definiálhat. 3

Példa Fax Nyomtató Definiál egy eseményt Értesítés az esemény bekövetkez éséről Levelező menedzser Bejelentik érdeklődésüket az esemény iránt Új üzenet érkezik 4

Az eseményt megosztó osztály tervezése I Esemény paramétereinek definiálása Osztály definiálása (neve vége v EventArg), őse a Systen.EventArgs 5

Az eseményt megosztó osztály Ajánl nlások: tervezése II Delegátum definiálása Neve: EventHandler végű void visszatérés 2 paraméter: Első: : küldk ldő objektum Második: paraméterek Ha nincs + paraméter, akkor használjuk a System.EventHandler-t,, aminek a 2. paramétere EventArgs.Empty legyen! 6

Az eseményt megosztó osztály tervezése III Esemény definiálása Az előzőleg leg definiált delegátum a típusa! Ismernie kell mind a kiterjesztő, mind az érdeklődő osztályoknak! Láthatósága általában publikus! Gyakran tulajdonságnak definiáljuk! 7

Az eseményt megosztó osztály tervezése IV Értesítő fv.. definiálása Protected, virtual Paramétere az esemény paramétere Neve On-al kezdődik dik és s a vége v az esemény neve! Ellenőrzi, hogy érdeklődik dik e e valaki az esemény iránt, majd meghívja azokat! 8

Az eseményt megosztó osztály tervezése V Észlelő fv.. definiálása 1. Észleli a várt v eseményt 2. Létrehozza az esemény paraméter osztály lyát Meghívja az értesítő fv.-t. 3. Megh 9

Példa kódjak class MailManager{ public class MailMsgEventArgs : EventArgs { public MailMsgEventArgs( String from, String to, String subject, String body){ this.from =from;this.to = to; this.subject =subject;this.bodythis.body =body; public readonly String from, to, subject, body; public delegate void MailMsgEventHandler(Object sender, MailMsgEventArgs args); public event MailMsgEventHandler MailMsg; protected virtual void OnMailMsg(MailMsgEventArgs MailMsgEventArgs e){ if (MailMsg!=null){ MailMsg(this this,, e); public void SimulateArrivingMsg(String String from, String to, String subject, String body){ MailMsgEventArgs e = new MailMsgEventArgs(from from, to, subject, body); OnMailMsg(e); 10

Mi is törtt rténik? public event MailMsgEventHandler MailMsg; Sor hatására: 1. Private delegátum adattag (linkelt lista feje) 2. Publikus add_ tagfv.. (System.Delegate.Combine( fv.-t hívja) 3. Publikus remove_ tagfv.. (System.Delegate.Remove( fv.-t hívja) jön n létre. l 11

Mi is törtt rténik? II private MailMsgEventHandler MailMsg = null; [MethodImplAttribute(MethodImplOptions.Synchronized)] public void add_mailmsg MailMsg(MailMsgEventHandlerMailMsgEventHandler handler) { MailMsg = (MailMsgEventHandler( MailMsgEventHandler) Delegate.Combine(MailMsg MailMsg, handler); [MethodImplAttribute(MethodImplOptions.Synchronized)] public void remove_mailmsg MailMsg(MailMsgEventHandlerMailMsgEventHandler handler) { MailMsg = (MailMsgEventHandler( MailMsgEventHandler) Delegate.Remove(MailMsg MailMsg, handler); 12

Az érdeklődő osztály tervezése 1. Definiáljunk legalább 3 tagfv.-t: Konstruktort Eseménykezel nykezelő Érdeklődést visszavonó (unregister) 2. Konstruktor: kapja meg a érdekelt eseményt küldk ldő osztályt! a fv.. végén v n jelentse be érdeklődését t az esemény iránt! operator+= Eseménykezel nykezelő,, ami átfordul xxx.add_ fv.. Hívásra. H 13

Az érdeklődő osztály tervezése II 3. Eseménykezel nykezelő fv. Paraméterszignat terszignatúrája meg kell egyezzen az esemény delegátum típusával! 4. Érdeklődést visszavonó (unregister) operator-= Eseménykezel nykezelő,, ami átfordul xxx.remove_ fv.. Hívásra. H Esetleg meghívhatja a Dispose-t is. 14

Példa kódja k Fax osztály class Fax{ public Fax(MailManager mm){ mm.mailmsg += new MailManager.MailMsgEventHandler(FaxMsg FaxMsg); private void FaxMsg(Object Sender, MailManager.MailMsgEventArgs e){ Console.WriteLine("Faxing mail message:"); Console.WriteLine(" To: : {0\n From: : {1\n Subject: : {2\n Body: {3\n", e.from, e.to, e.subject, e.body); public void Unregister(MailManager mm){ MailManager.MailMsgEventHandler callback = new MailManager.MailMsgEventHandler(FaxMsg FaxMsg); mm.mailmsg -= callback; 15

Példa kódja k Pager osztály class Pager{ public Pager(MailManager mm) { mm.mailmsg += new MailManager.MailMsgEventHandler(PagerMsg PagerMsg); private void PagerMsg(Object Sender, MailManager.MailMsgEventArgs e){ Console.WriteLine(" ("Pager message:"); Console.WriteLine(" To: : {0\n From: : {1\n Subject: : {2\n Body: {3\n", e.from, e.to, e.subject, e.body); public void Unregister(MailManager mm) { MailManager.MailMsgEventHandler callback = new MailManager.MailMsgEventHandler(PagerMsg PagerMsg); mm.mailmsg -= callback; 16

Esemény regisztráci ció feletti közvetlen felügyelet A generált kód k d nem ideális! Ha nincs párhuzamossp rhuzamosság, akkor felesleges a [MethodImplAttribute(MethodImplOpMethodImplOp tions.synchronized)] attribútum, tum, ami lassít! Pláne ha még m loggolni is kell! 17

Példakód d változv ltozása class MailManager { public class MailMsgEventArgs : EventArgs{ public delegate void MailMsgEventHandler(Object sender, MailMsgEventArgs args); private MailMsgEventHandler mailmsgeventhandlerdelegate; public event MailMsgEventHandler MailMsg{ add { mailmsgeventhandlerdelegate = (MailMsgEventHandler( MailMsgEventHandler) Delegate.Combine(mailMsgEventHandlerDelegate mailmsgeventhandlerdelegate,value); remove{ mailmsgeventhandlerdelegate = (MailMsgEventHandler( MailMsgEventHandler) Delegate.Remove(mailMsgEventHandlerDelegate mailmsgeventhandlerdelegate,value); protected virtual void OnMailMsg(MailMsgEventArgs MailMsgEventArgs e) { if (mailmsgeventhandlerdelegate!=null){ mailmsgeventhandlerdelegate(this this,, e); public void SimulateArrivingMsg(String String from,string to,string subject,string body){ ){ 18