Krizsán Zoltán iit 1.1.  Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus,

Slides:



Advertisements
Hasonló előadás
C# nyelvi áttekintő A „Programozás C# nyelven (Illés Zoltán)”
Advertisements

Osztály leszármaztatás
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Öröklődés 2..
© Kozsik Tamás Tömbök, kollekciók és egyéb alaposztályok.
© Kozsik Tamás Beágyazott osztályok A blokkstrukturáltság támogatása –Eddig: egymásba ágyazható blokk utasítások Osztálydefiníciók is egymásba.
Szabó Tamás Károly G6HT12 A Ruby programozási nyelv.
Csala Péter ANDN #4. 2 Tartalom  C# - ban előre definiált típusok  Változók  Változókkal műveletek  Elágazás  Ciklus.
Fájlkezelés, IO Kivételkezelés Belső osztályok
Osztályok Garbage collection.  általában minden osztálynak vannak adattagjai és/vagy metódusai ◦ adattagok megadása:  [láthatóság] [static] [final]
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 7. Gyakorlat Operator overloading.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 5. Gyakorlat Öröklődés, virtuális függvények,
Programozás II. 3. Gyakorlat C++ alapok.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Tömbök ismétlés Osztályok Java-ban Garbage collection
A Java programozási nyelvSoós Sándor 1/17 Java programozási nyelv 4. rész – Osztályok II. Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai.
Java programozási nyelv 3. rész – Osztályok I.
Java programozási nyelv 5. rész – Osztályok III.
C# Alapok Krizsán Zoltán.
C# tagfüggvények.
Delegátumok C#-ban Krizsán Zoltán iit 1.0.
C# osztályok Krizsán Zoltán 1.0.
C# osztályok Krizsán Zoltán 1.1.
C# tagfüggvények.
Krizsán Zoltán iit 1.2.  Nem kell vizuális felületnek lennie.  Delegátumok segítségével valósíthatja meg a.NET. Krizsán Zoltán iit Delegátumok C#-ban2.
Krizsán Zoltán.  Ha az algoritmus sokáig dolgozik,  de el akarjuk kerülni a „fagyást”.  Kisebb a költsége, mint az új folyamatnak.  Programozás szempontjából.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Haladó Programozás Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
Kivételkezelés a C++ nyelvben Bevezetés
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
V 1.0 OE-NIK HP 1 Programozási Paradigmák és Technikák Eseménykezelés Névtelen metódusok (anonymous methods)
Összetett adattípusok
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz tárgy honlap:
Objektum orientált programozás a gyakorlatban
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Hernyák Zoltán Programozási Nyelvek II.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1 Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy.
Javascript Microsoft által készített kiegészítése Statikus típusosság Nagy projektek Windows 8 fejlesztésénél WinRT egy részét ebben írták Nyílt forráskódú,
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozási Paradigmák és Technikák Programozási eszközök Interfészek Generikus.
Java programozási nyelv Metódusok
Java programozási nyelv Adatbekérés konzolról
Generics Krizsán Zoltán. Bemutató A.NET 2.0 verziótól. A.NET 2.0 verziótól. Típusparaméter Típusparaméter Más nyelvben ez a template (sablon). Más nyelvben.
1 Objektum orientált programozás Öröklődés: többszörös öröklődés, konstruktorok, destruktorok, overloading Nagy Szilvia.
Programozás III OOP ALAPOK.
Programozás III KOLLEKCIÓK.
Haladó Programozás Delegáltak, események OE-NIK HP 1.
Haladó Programozás Reflexió OE-NIK HP.
Szebb és használhatóbb programok Vezérlőelemek dinamikus felhelyezése.
Objektum orientált programozás 4. Mutatók, típusok és struktúrák Nagy Szilvia.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 6. gyakorlat.
1Szegedi Tudományegyetem Természettudományi és Informatikai KarAntal Gábor Programozás I. 4. gyakorlat.
TÁMOP /1-2F JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam Osztályok, objektumok definiálása és alkalmazása. Saját.
Krizsán Zoltán, iit C# osztályok 2 Adattagok  Osztály hatáskörben definiált változó.  Formája: [attribútum] [módosító] típus azonosító [=kezdő érték][,
Eseménykezelés ismétlés Névtelen metódusok (anonymous methods)
C# áttekintés.
A C++ programozási nyelv
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
B M Java Programozás 5. Gy: Java alapok IT A N Adatkezelő 1.rész
Előadás másolata:

Krizsán Zoltán iit 1.1

 Aszinkron történésről értesítés egy vagy több objektum számára.  Delegátumok segítségével valósítja meg a C#.  event típus, melynek hatására generálódnak:  feliratkozó, leíratkozó fv. (add_XX, remove_XX), amit mi +=, -= formában hívhatunk  delegátum adattag (privát) Krizsán Zoltán iit Események C#-ban2

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, amit közzétehet. Krizsán Zoltán iit Események C#-ban3

Krizsán Zoltán iit Események C#-ban4 FaxNyomtató Levelező menedzser Új üzenet érkezik Bejelentik érdeklődésüket az esemény iránt Értesítés az esemény bekövetkez éséről Definiál egy eseményt

 Ha szükségünk van paraméterre. (Sender-t mindenképp megkapja)  Osztály definiálása (neve vége EventArg), őse a Systen.EventArgs  public class StartEventArgs : System.EventArgs { } Krizsán Zoltán iit Események C#-ban5

 Ha van saját esemény paraméter, akkor kell saját delegátum típus is!  Ha nincs, akkor használjuk a System.EventHandler Krizsán Zoltán iit Események C#-ban6

 Ajánlások:  Neve: EventHandler végű  void visszatérés  2 paraméter:  Első: küldő objektum  Második: paraméterek osztály példánya  Ha nincs + paraméter, akkor használjuk a System.EventHandler-t, aminek a 2. paramétere EventArgs.Empty legyen! Krizsán Zoltán iit Események C#-ban7

 Az előző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!  Minden esetben a küldő osztály hozza létre. Krizsán Zoltán iit Események C#-ban8

 Ha a megosztó osztály komponens  Egy esemény megjelölhető  [System.ComponentModel.DefaultEvent("BeforeSt art")] public class Sender : System.ComponentModel.Component { } Krizsán Zoltán iit Események C#-ban9

 Protected, virtual a javasolt  Paramétere az esemény paraméter osztály példánya  Neve On-al kezdődik és a vége az esemény neve!  Ellenőrzi, hogy érdeklődik –e valaki az esemény iránt, majd meghívja azokat! protected virtual void OnBeforeStart(StartEventArgs e) { if (BeforeStart != null) BeforeStart(this, e); } Krizsán Zoltán iit Események C#-ban10

1. Észleli a várt eseményt 2. Létrehozza az esemény paraméter osztály példányát 3. Meghívja az értesítő fv.-t. átadva annak az objektumot. Krizsán Zoltán iit Események C#-ban11

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.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 e){ if (MailMsg !=null){ MailMsg(this, e); }} public void SimulateArrivingMsg(String from, String to, String subject, String body){ MailMsgEventArgs e = new MailMsgEventArgs(from, to, subject, body); OnMailMsg(e); } Krizsán Zoltán iit Események C#-ban12

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 létre. Krizsán Zoltán iit Események C#-ban13

private MailMsgEventHandler MailMsg = null; [MethodImplAttribute(MethodImplOptions.Synchronized)] public void add_MailMsg(MailMsgEventHandler handler) { MailMsg = (MailMsgEventHandler) Delegate.Combine(MailMsg, handler); } [MethodImplAttribute(MethodImplOptions.Synchronized)] public void remove_MailMsg(MailMsgEventHandler handler) { MailMsg = (MailMsgEventHandler) Delegate.Remove(MailMsg, handler); } Krizsán Zoltán iit Események C#-ban14

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

3. Eseménykezelő fv. Paraméterszignatúrája meg kell egyezzen az esemény delegátum típusával! 4. Érdeklődést visszavonó (unregister) operator-= Eseménykezelő, ami átfordul xxx.remove_ fv. Hívásra. Esetleg meghívhatja a Dispose-t is. Krizsán Zoltán iit Események C#-ban16

class Fax{ public Fax(MailManager mm){ mm.MailMsg += new MailManager.MailMsgEventHandler(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); mm.MailMsg -= callback; } Krizsán Zoltán iit Események C#-ban17

class Pager{ public Pager(MailManager mm) { mm.MailMsg += new MailManager.MailMsgEventHandler(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); mm.MailMsg -= callback; } Krizsán Zoltán iit Események C#-ban18

 A generált kód nem ideális!  Ha nincs párhuzamosság, akkor felesleges a [MethodImplAttribute(MethodImplOptions. Synchronized)] attribútum, ami lassít!  Pláne ha még loggolni is kell! Krizsán Zoltán iit Események C#-ban19

class MailManager { public class MailMsgEventArgs : EventArgs{…} public delegate void MailMsgEventHandler(Object sender, MailMsgEventArgs args); private MailMsgEventHandler mailMsgEventHandlerDelegate; public event MailMsgEventHandler MailMsg{ add {mailMsgEventHandlerDelegate = (MailMsgEventHandler) Delegate.Combine(mailMsgEventHandlerDelegate,value); } remove{mailMsgEventHandlerDelegate = (MailMsgEventHandler) Delegate.Remove(mailMsgEventHandlerDelegate,value); } protected virtual void OnMailMsg(MailMsgEventArgs e) { if (mailMsgEventHandlerDelegate !=null){ mailMsgEventHandlerDelegate(this, e); } public void SimulateArrivingMsg(String from,String to,String subject,String body){…} } Krizsán Zoltán iit Események C#-ban20

 delegátumhoz rendelhetünk egy kódblokkot obj.Esemeny += delegate { Console.WriteLine(”Esemény létrejött!"); };  Elérheti a lokális változókat  NEM érheti el a fv. out,ref paramétereit! Krizsán Zoltán iit Események C#-ban21