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

Slides:



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


A kétdimenziós tömbök Páll Boglárka. Ismétlés: Az egydimenziós tömbök  Meghatározás: A tömb egy olyan összetett adatszerkezet amely több rögzített számú,
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,
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
1. foreach( fejlesztő in Lurdyház ) { fejlesztő.Agy. Delete If( delegate ( Content c ) { return c.ContainsAny( „Win32 / User32.dll”, „GDI”,„GDI+”,„WindowsForms”,
Tömbök C#-ban.
1 Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz.
Bevezetés a tárgyakhoz Tárgyak  Objects are the containers for values of a specified type  Objects are either signals, variables or constants  Once.
FelültöltésVHDL Felültöltés (Overloading) n Áttekintés n Példák.
Hibakezelés és Tesztelés a Visual Studio.NET-ben
TRANZIENS ADATTÁROLÁS State objektum Egy alkalmazásszintű gyűjtemény (Dictionary), mely Tombstone esetén megőrzi tartalmát a memóriában kulcs/érték párokként.
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
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 9. Gyakorlat Alap file műveletek.
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
C# tagfüggvények.
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.
Course Situation and Event Driven Models for Multilevel Abstraction Based Virtual Engineering Spaces Óbuda University John von Neumann Faculty of Informatics.
OE-NIK HP Haladó Programozás WCF kivételkezelés. OE-NIK HP Haladó Programozás Windows Communication Foundation A szolgáltatás, a hoszt és az ügyfél elkészítése.
Oracle multimédia Kiss Attila Információs Rendszerek Tanszék
Framework fundamentumok
Kivételkezelés.
A megértés körei Binzberger Viktor Budapest Műszaki és Gazdaságtudományi Egyetem Filozófia és Tudománytörténet Tanszék.
PHP VI Adatbázisok, MySQL
PHP V Osztályok, Objektumok. Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name;
PHP II. Tömbök, sztringek
Windows Server 2008 { PowerShell }
Alertet indíthat egy: SQL Server esemény (LOG) SQL Server performancia érték WMI events Alert végezhet: Operátor értesítést JOB indítás (válasz az eseményre)
P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.
Összetett adattípusok
Gincsai Gábor Dávid Zoltán MSDN Kompetencia Központ Budapesti Műszaki és Gazdaságtudományi Egyetem Automatizálási.
Gábor Dénes Főiskola (IAI)Programozási technológia (Java) - III. / 1 13.Állományok, bejegyzések 14.Folyamok 15.Közvetlen hozzáférésű állomány.
Budapest University of Technology and Economics Fault-tolerant Systems Research Group Nyílt Fejlesztőrendszerek JFace.
Könyvtár, csomag és alprogramokVHDL Könyvtár, csomag és alprogram n Library és use n Package n Alprogramok –Procedure –Function –Resolution function Egy.
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 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.
Motor IIII. Vezérlés Szécsi László. Letöltés diák: //l09-engine4.ppt.
Transzformációk, textúrák, árnyalás Szécsi László.
DirectX9 empty project Szécsi László. Project létrehozása Microsoft DirectX SDK (August 2008) telepítése Start Menu \ Microsoft DirectX SDK (August 2008)\
V. labor Thread, animáció. Animáció A figurák a lépés kijelölése után nem rögtön az új helyen teremnek, hanem egyenes vonal mentén mozognak a cél felé.
SzgLab 3. Java. I. labor Alapok, OOP váz, megjelenítés konzolon.
II. labor Lépések kezelése. Új metódus a Square osztályba public static int letterToFileIndex(char letter) throws NumberFormatException { int i = 0; for.
User interface Szécsi László. Egg projectben DXUTgui.cpp – CDXUTDialogResourceManager::CDXUTDialogReso urceManager() m_SpriteBufferBytes11 = 0; ezt kihagyták,
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.
HTTP kommunikáció Androidon HttpClient-en keresztűl HttpPost/HttpGet objektum használatával HttpClient execute metódusának meghívása.
Java programozási nyelv Filekezelés
- Group Policy - Group Policy Preferences - Group Policy 4x5 - Optimális munkakörnyezet – az első lépcsőfok.
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.
Haladó Programozás Reflexió OE-NIK HP.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás I. 7. gyakorlat.
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. 7. 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][,
Hernyák Zoltán Programozási Nyelvek II.
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
JAVA programozási nyelv NetBeans fejlesztőkörnyezetben I/13. évfolyam
Függvénysablonok használata
Előadás másolata:

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

Események kezelése 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#-ban

Delegátumok Típusos fv. pointer Biztonságos kódkészítés miatt tiltott a pointer aritmetika a C#-ban. Fv. Pointer helyett delegátum Alakja: delegate típus nev(tipus param_nev,..) Ha megadjuk a paraméter típusát, akkor a paraméter nevét is meg kell adni! Krizsán Zoltán iit Delegátumok C#-ban

Delegátum II. Nem csak a fv. címe, de visszatérési érték + paraméterek Amire hivatkozik, lehet: Statikus fv. Példány fv. Krizsán Zoltán iit Delegátumok C#-ban

Példa delegate void MyDelegate(); public class MyClass{ public void InstanceMethod(){Console.WriteLine("A message from the instance method.");} static public void StaticMethod(){Console.WriteLine("A message from the static method.");} } public class MainClass{ static public void Main(){ MyClass p = new MyClass(); MyDelegate d = new MyDelegate( p.InstanceMethod ); d(); d = new MyDelegate( MyClass.StaticMethod ); d(); Krizsán Zoltán iit Delegátumok C#-ban

Részlet a Példa il kódjából .class private auto ansi sealed MyDelegate extends [mscorlib]System.MulticastDelegate{ .method public hidebysig specialname rtspecialname instance void .ctor( object 'object', native int 'method‘ ) runtime managed { } // end of method MyDelegate::.ctor .method public hidebysig virtual instance void Invoke() runtime managed { } // end of method MyDelegate::Invoke .method public hidebysig newslot virtual instance class [mscorlib]System.IAsyncResult BeginInvoke(class [mscorlib]System.AsyncCallback callback, object 'object') runtime managed { } // end of method MyDelegate::BeginInvoke instance void EndInvoke(class [mscorlib]System.IAsyncResult result) runtime managed { } // end of method MyDelegate::EndInvoke } // end of class MyDelegate Krizsán Zoltán iit Delegátumok C#-ban

MulticastDelegate minden delegátum őse _target (System.Object): az objektumra referál, amely a call back fv.-hez kapcsolódik (csak példány fv. esetén). _methodPtr (System.Int32): egész szám, amellyel a CLR azonosítja a fv.-t. _prev (System.MulticastDelegate): a láncolt lista előző elemére mutat. Krizsán Zoltán iit Delegátumok C#-ban

MulticastDelegate II. Két fontos tulajdonság: Target->_target Method->_methodPtr Az Invoke fv. nem hívható meg közvetlenül (VB-ben viszont kötelező). Equals újradefiniált, igaz, ha _target és _methodPtr azonosakra referál. Krizsán Zoltán iit Delegátumok C#-ban

Delegátum lánc A delegátum önmagában is hasznos, de láncolt listára fűzve hatékonyabb _prev az előző elemre. Kezdetben null, később áll be egy érvényes objektumra. Krizsán Zoltán iit Delegátumok C#-ban

System.Delegate public static Delegate Combine(Delegate tail, Delegate head) : hozzáfűz a listához public static Delegate Combine(Delegate[] delegateArray) : hozzáfűz a listához public static Delegate Remove(Delegate source, Delegate value) : töröl a listából Krizsán Zoltán iit Delegátumok C#-ban

System.Delegate C#-ban public static Delegate Combine helyett operator+= public static Delegate Remove helyett operator-= Krizsán Zoltán iit Delegátumok C#-ban

Példa II.-set osztály class Set { private Object[] items; public Set(Int32 numItems){ items = new Object[numItems]; for (Int32 i =0; i < numItems; i++) items[i] = i; } public delegate void Feedback(Object value, Int32 item, Int32 numItem); public void ProcessItems( Feedback feedback ){ for(Int32 item = 0; item< items.Length(); item++){ if ( feedback != null ){ feedback(items[item], item+1, items.Length); } Krizsán Zoltán iit Delegátumok C#-ban

Példa II.-App static void Main(){ StaticCallbacks(); InstanceCallbacks(); } static void StaticCallbacks() { Set setOfItems = new Set(5); setOfItems.ProcessItems (null);Console.WriteLine(); setOfItems.ProcessItems ( new Set.Feedback(App.FeedbackToConsole) ); Console.WriteLine(); setOfItems.ProcessItems ( new Set.Feedback(App.FeedbackToMsgBox) ); Set.Feedback fb = null; fb += new Set.Feedback(App.FeedbackToConsole); fb += new Set.Feedback(App.FeedbackToMsgBox); setOfItems.ProcessItems(fb);Console.WriteLine(); } static void InstanceCallbacks() { Set setOItems = new Set(5); App appobj = new App(); setOItems.ProcessItems( new Set.Feedback(appobj.FeedbackToFile) ); Krizsán Zoltán iit Delegátumok C#-ban

Példa II.-App static void FeedbackToConsole(Object value, Int32 item, Int32 numItems){ Console.WriteLine("Processing item {0} of {1}: {2}.", item, numItems, value); } static void FeedbackToMsgBox(Object value, Int32 item, Int32 numItems){ MessageBox.Show(String.Format("Processing item {0} of {1}: {2}.", item, numItems, value)); void FeedbackToFile(Object value, Int32 item, Int32 numItems){ StreamWriter sw = new StreamWriter("Status", true); sw.WriteLine("Processing item {0} of {1}: {2}.",item,numItems, value); sw.Close(); Krizsán Zoltán iit Delegátumok C#-ban

IL kód Nézzük meg az IL kódot! feedback( items[item], item+1, items.Length ); helyett: IL_001b: callvirt instance void Set/Feedback::Invoke(object, int32, int32) Krizsán Zoltán iit Delegátumok C#-ban

MulticastDelegate.Invoke Public Int32 virtual Invoke(Object value, Int32 item, Int32 numItem ) { if (_prev != null) _prev.Invoke( value, item, numItems ); return _target.methodPtr(value, item, numItems } Krizsán Zoltán iit Delegátumok C#-ban

Teljes kontroll a delegátum lánc felett public virtual Delegate[] GetInvocationList() Klónozza a lista elemeit egy tömbbe, de minden elem _prev-je null. A visszaadott tömbön végigjárhatunk! Krizsán Zoltán iit Delegátumok C#-ban

Példa III class Light{ public String GetPosition() { return "Villany felkapcsolva!"; } class Fan{ public String Speed() { throw new Exception("Nagyon gyors!"); class Speaker{ public String Volume() { return "Nagyon hangos!"; Krizsán Zoltán iit Delegátumok C#-ban

Példa III-AppI delegate string GetStatus(); static public void Main() { GetStatus getstatus = null; getstatus += new GetStatus( new Light().GetPosition ); getstatus += new GetStatus( new Fan().Speed ); getstatus += new GetStatus( new Speaker().Volume ); Console.WriteLine( GetComponentStatusReport(getstatus) ); } Krizsán Zoltán iit Delegátumok C#-ban

Példa III-AppII static String GetComponentStatusReport(GetStatus status){ if ( status == null) return null; StringBuilder sb = new StringBuilder(); Delegate[] arrayOfDelegates = status.GetInvocationList(); foreach( GetStatus getstatus in arrayOfDelegates ){ try{ sb.AppendFormat("{0}{1}{1}", getstatus() , Environment.NewLine); } catch(Exception e){ Object o = getstatus.Target; sb.AppendFormat("Hiba keletkezett: {1}{2}{0} Hiba: {3}{0}{0}", Environment.NewLine, ((o == null) ? "" : o.GetType() + "."), getstatus.Method.Name, e.Message); return sb.ToString(); Krizsán Zoltán iit Delegátumok C#-ban