100 likes | 187 Views
Microsoft.NET környezet. Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz. 1. Delegate - Callback fv-ek készítése. Callback fv: egy megadott típusú (szignatúrájú fv)-t mint paramétert adunk át. Ezen fv vissza lehet hívni.
E N D
Microsoft.NET környezet Hernyák Zoltán Programozási Nyelvek II. Eszterházy Károly Főiskola Számítástudományi tsz 1
Delegate - Callback fv-ek készítése Callback fv: egy megadott típusú (szignatúrájú fv)-t mint paramétert adunk át. Ezen fv vissza lehet hívni. A fv szignatúrát rögzíteni kell, mint típust: delegate void PercentCallback( int ); Kulcsszó Visszatérési típus A típus neve A fv paraméterezése 2
Delegate - Callback fv-ek készítése delegate void PercentCallback( int ); class ZIP_Osztaly { public static void Becsom(string inpFile, PercentCallBack fv) { … file megnyitasa … int szazalek_kesz = 0; while (!nincs_file_vege()) { … egy szakasz becsomagolasa … szazalek_kesz ++; fv( szazalek_kesz ); } … file lezárása … } 3
Delegate - Callback fv-ek készítése delegate void PercentCallback( int ); Megfelel a ‘PercentCallBack’ szignatúrájának class sajatOsztaly { public static void Kiir(int szazalek) { Console.WriteLine(‘#’); } } Becsom(”C:/proba.txt”, new PercentCallBack( sajatOsztaly.Kiir )); Átadjuk neki a PercentCallBack szignatúrának megfelelő fv-t. Ezt a fv-t fogja becsomagolás közben visszahívni… 4
Delegate - Callback fv-ek készítése delegate void PercentCallback( int ); Megfelel a ‘PercentCallBack’ szignatúrájának, de példányszintű! class sajatOsztaly { public void Kiir(int szazalek) { Console.WriteLine(‘#’); } } sajatOsztaly s = new sajatOsztaly(); Becsom(”C:/proba.txt”, new PercentCallBack( s.Kiir )); Átadjuk neki a PercentCallBack szignatúrának megfelelő fv-t. Ezt a fv-t fogja becsomagolás közben visszahívni… 5
Delegate - Callback fv-ek készítése Callback fv típusú mező… delegate void PercentCallback( int ); class ZIP_Osztaly { public static PercentCallback callBackFV = null; public static void Becsom(string inpFile) { … file megnyitasa … int szazalek_kesz = 0; while (!nincs_file_vege()) { … egy szakasz becsomagolasa … szazalek_kesz ++; if (callBackFV != null) callBackFV( szazalek_kesz ); } … file lezárása … } 6
Delegate - Callback fv-ek készítése Nem egy, de több visszahívandó fv kezelése… public static ArrayList callBackFV_List = new ArrayList(); public static void Becsom(string inpFile) { … foreach( PercentCallback fv in callBackFV_LIST) fv( szazalek_kesz ); } ZIP_Osztaly.callBackFV_List.Add( new PercentCallBack( sajatOsztaly.Kiir ) ); Becsom(”C:/proba.txt”); Nem garantált, hogy az ArrayList-be csak ilyen fv-ek kerülnek bele!!! 7
Delegate - Callback fv-ek készítése Típushelyesség kikényszerítése…. private static ArrayList callBackFV_List = new ArrayList(); public static void AddFv( PercentCallBack fv ) { callBackFV_List.Add( fv ); } public static void RemoveFv( PercentCallBack fv ) { callBackFV_List.Remove( fv ); } ZIP_Osztaly.AddFv( new PercentCallBack( sajatOsztaly.Kiir ) ); Becsom(”C:/proba.txt”); ZIP_Osztaly.RemoveFv( new PercentCallBack( sajatOsztaly.Kiir ) ); 8
Delegate - Callback fv-ek készítése delegate void PercentCallback( int ); • public static event PercentCallback callBackFV_LIST; • public static void Becsom(string inpFile) • { • … • if (callBackFV_LIST != null) • callBackFV_LIST( szazalek_kesz ); • } Az ‘event’ szóval deklaráljuk, hogy a callBackFV_LIST egyszerre több fv-t is képes tárolni. Ezen fv-ek mindegyikét a fenti egyszerű szintaxissal meg tudjuk hívni. 9
Delegate - Callback fv-ek készítése ZIP_Osztaly.callBackFV_List + = new PercentCallBack( sajatOsztaly.Kiir ) ); Becsom(”C:/proba.txt”); ZIP_Osztaly.callBackFV_List - = new PercentCallBack( sajatOsztaly.Kiir ) ); += -el lehet feliratkozni az visszahívási listára -= -el lehet leiratkozni 10