1.48k likes | 1.6k Views
Ismétlés. Néhány fontosabb nyelvi elem . Tulajdonságok. Tulajdonságok. Cél: Korlátozott láthatóságú adattagok beállítási/lekérdezési műveleteinek megoldása egyszerűbb (tömörebb) szintaktikával Számított értékű mező megvalósítása Mikor előnyös?
E N D
Ismétlés Néhány fontosabb nyelvi elem
Tulajdonságok Cél: • Korlátozott láthatóságú adattagok beállítási/lekérdezési műveleteinek megoldása egyszerűbb (tömörebb) szintaktikával • Számított értékű mező megvalósítása Mikor előnyös? • Kevés kód szükséges a hozzáférés szabályozásához • A kód nem virtuális J.Zs.Cs.: Vizuális programozás (c) 2013
Elérők (accessors) • Tulajdonságelérő "tagfüggvények" class Nyomógomb { privatestring Felirat; //a háttérben levő korlátozott hozzáférésű adattag publicstringNFelirat//az adattagot "közzétevő" tulajdonság, ez látható { get { return Felirat;} //lekérdező elérő set { if( value!=null && …) //ellenőrzött beállítás Felirat=value; } } … J.Zs.Cs.: Vizuális programozás (c) 2013
Csak olvasható tulajdonság private int Szélesség; private int Magasság; … public int Terület //számított tulajdonság, nincs mögötte adattag { get { return Szélesség*Magasság; } } //a tulajdonság csak olvasható J.Zs.Cs.: Vizuális programozás (c) 2013
Használat Nyomógomb ng=new Nyomógomb(); … ng.NFelirat="Ok"; //set elérő használata … int Ter=ng.Terület; //get elérő használata J.Zs.Cs.: Vizuális programozás (c) 2013
Jellemzők • Nem használható fel metódus ref vagy out paramétereként • Nincs címe • Lehet statikus • Elfedheti ősosztály azonos nevű tagját (new) • Lehet virtuális, absztrakt vagy override • Megjelenhet egy interfészben J.Zs.Cs.: Vizuális programozás (c) 2013
Jellemzők • Nem lehet void • A mögötte levő korlátozott láthatóságú tagokat lecserélhetjük a "kifele" mutatott tulajdonság cseréje nélkül • Nem vehet át közvetlenül egynél több értéket J.Zs.Cs.: Vizuális programozás (c) 2013
Tulajdonság típusok • Írható-olvasható • Csak olvasható • Csak írható • static: • Osztályszintű, csak az osztály statikus adataihoz fér hozzá, • Nem hivatkozhat a this-re vagy példány szintű tagokra • Nem lehet virtuális, absztrakt vagy override J.Zs.Cs.: Vizuális programozás (c) 2013
Lazy creation • Lazyinstantiation, just-in-timecreation • A háttérben levő korlátozott hozzáférésű mező null kezdőértéket kap • Igazi kezdőértéket a tulajdonsághoz történő első hozzáféréskor, pl. olvasáskor kapja meg a get-be beépített inicializáló kód útján J.Zs.Cs.: Vizuális programozás (c) 2013
Automatikus tulajdonság(automatikusan implementált) J.Zs.Cs.: Vizuális programozás (c) 2013
Példaprogram Jelszóbekérő ablak
Indexelő • Rokon vonásokat mutat a tulajdonságokkal és a C++ tömbindex operátor átdefiniálásával Cél: • Egy objektumnév után illesztve a tömbindex operátort és indexként egy értéket megadva elérjük az objektum egy adattagját, vagy az adattagban tárolt adatok valamelyikét J.Zs.Cs.: Vizuális programozás (c) 2013
Jellemzők • Átdefiniálható más indextípust megadva • Nem adható át ref vagy out paraméterként • Nem lehet statikus J.Zs.Cs.: Vizuális programozás (c) 2013
Példaprogram Asszociatív
Extensionmethod • Bővítő metódus • Létező osztály kiterjesztése új metódussal az eredeti osztály módosítása nélkül • Nem kell származtatott osztályt létrehozni (előnyös sealed osztályoknál) • Meghívható az eredeti osztály objektumára http://msdn.microsoft.com/en-us/library/bb311042%28v=vs.100%29.aspx J.Zs.Cs.: Vizuális programozás (c) 2013
Létrehozás J.Zs.Cs.: Vizuális programozás (c) 2013
Használat J.Zs.Cs.: Vizuális programozás (c) 2013
Virtual példa 20 J.Zs.Cs.: Vizuális programozás (c) 2010 J.Zs.Cs.: Vizuális programozás (c) 2013
Virtuális metódus • Futási időben dől el, hogy az osztályhierarchián belüli virtuális metóduslánc melyik tagja hajtódik végre • Virtuális metódus nem lehet private • A virtual kulcsszó nem használható a static, abstractésoverridekulcsszavakkal együtt • Ha definiálunk a leszármazott osztályban ugyanilyen paraméterszignatúrával egy metódust, akkor azt • a virtuális metóduslánc folytatásának tekintjük (override) • a lánctól független metódusnak tekintjük (new) • új virtuális lánc kezdetének tekintjük (newvirtual) J.Zs.Cs.: Vizuális programozás (c) 2013
virtual - override class Szülő { ... public virtual intMetódus( ) { ... } public virtual int AdatLekér(){ … } } class Gyerek: Szülő { ... public overrideintMetódus( ) { ... } new public int AdatLekér(){ … } } J.Zs.Cs.: Vizuális programozás (c) 2013
override • A felüldefiniált metódus virtuális vagy absztrakt kell legyen • Az override nem változtathatja meg az elem elérési szintjét (public, protected) • Nem használható a new, static, virtual, abstract kulcsszavak együtt J.Zs.Cs.: Vizuális programozás (c) 2013
new • new-val virtuális metódus is definiálható (a bázis osztályban nem volt virtuális, de az aktuális osztályban és annak leszármazottaiban az) • new-val adattag és leszármazott osztály is elfedhető • Öröklött metódus vagy adattag elfedése: new kulcsszó J.Zs.Cs.: Vizuális programozás (c) 2013
Lambda kifejezés • Egyszerű eszköz inline (névtelen)metódus megvalósítására • A fordító egy névtelen metódussal fogja helyettesíteni • Implicit típusdef. a parlistában: • (paraméterlista)=>{utasítások} • paraméter=>utasítás • Explicit típusdef a parlistában: • (int i)=>3*i J.Zs.Cs.: Vizuális programozás (c) 2012
Lambda kifejezés és implicit típusdefiníció használata Random R=new Random(); List<int> L=new List<int>(); for (int i = 0; i < 20; i++) L.Add(R.Next(1000)); varPáratlanok = L.FindAll(Páratlan); Console.WriteLine("Páratlan számok: " +List2Str(Páratlanok)); varPárosok = L.FindAll(i => i%2==0); Console.WriteLine("Páros számok: " + List2Str(Párosok)); J.Zs.Cs.: Vizuális programozás (c) 2013
Objektum inicializálás J.Zs.Cs.: Vizuális programozás (c) 2013
Metódusreferencia (delegate) • Egy speciális változó, ami objektum jegyekkel is rendelkezik • Egy metódusra történő hivatkozást tárol, rajta keresztül hívható meg a metódus • Funkcióját tekintve hasonló a C++ függvénycímet tárolni képes mutatójához • Tartalma futási időben változtatható, különböző időpontokban más és más metódust – akár különböző osztályok tagjait – hívhatunk meg ugyanazon a metódusreferencián keresztül • Objektum tag és statikus osztálytag metódus egyaránt meghívható J.Zs.Cs.: Vizuális programozás (c) 2013
Alkalmazás - cél • Pl. több osztály/objektum eltérő nevű, de azonos paraméterlistájú és visszatérési értékű metódussal rendelkezik • A feladat az, hogy ezeket felváltva, vagy egymás utáni sorozatban meghívjuk • A meghívó metódus olyan kell legyen, hogy a rendszer újabb osztályokkal történő bővítése ne igényeljen jelentős kódmódosítást J.Zs.Cs.: Vizuális programozás (c) 2013
Megoldás • Egy tömböt/listát hozunk létre, aminek elemei metódusreferenciák lesznek • Amikor • egy új objektummal • egy új statikus metódussal • bővül a rendszerünk, létrehozunk egy metódusreferenciát, amiben tároljuk az új objektumban (v. osztályban) meghívni kívánt metódus referenciáját, majd • a metódusreferenciát felvesszük a listába J.Zs.Cs.: Vizuális programozás (c) 2013
Lépések Metódusreferencia típus deklarálása publicdelegatevisszértéktipMetódusReferenciaTípusNév(paraméterlista); Metódusreferencia típusú változó definiálása MetódusReferenciaTípusNévMVáltozó; Metódusreferencia objektum létrehozása MVáltozó=newMetódusReferenciaTípusNév(objektumnév.metódusnév); objektumnév.metódusnév: meghívandó metódus neve Metódus meghívása: MVáltozó(aktuális paraméterek); J.Zs.Cs.: Vizuális programozás (c) 2013
Metódusreferencia példaalkalmazás J.Zs.Cs.: Vizuális programozás (c) 2013
Esemény • Lehetővé teszi, hogy egy objektum más objektumokat értesítsen egy változásról • Két szereplő (objektum) típust különböztetünk meg: • Közzétevő (publisher): előidéz egy eseményt, hogy értesítse az összes érdekelt – feliratkozott (subscriber) objektumot • Feliratkozó (subscriber): megad egy metódust, amit meg kell hívni egy esemény bekövetkeztekor, regisztrálja magát közzétevőnél • Egy eseményre többen is feliratkozhatnak, de az is előfordulhat, hogy nincs érdeklődő • Megvalósítás: metódusreferenciák segítségével J.Zs.Cs.: Vizuális programozás (c) 2013
Megvalósítás • Metódusreferencia típus definiálásapublic delegate void MTípusNév(paraméterlista); a visszatérési érték típusa void kell legyen • A metódusreferencia típuson alapuló esemény definiálásapublic event MTípusNév EseményNév; J.Zs.Cs.: Vizuális programozás (c) 2013
Megvalósítás Feliratkozás az eseményre az eseménykezelő metódus megadásával EseményNév+=newMTípusNév(objnév.esemkeznév) Vagy EseményNév+=objnév.esemkeznév Vagy EseményNév+=osztnév.esemkeznév J.Zs.Cs.: Vizuális programozás (c) 2013
Esemény előidézése … if(EseményNév!=null) //ha van feliratkozó EseményNév(this); … • Meghívja sorban az egyes eseménykezelőket • A sorrend nem biztos • Ha közben kivétel keletkezik, akkor a még „várakozó” eseménykezelők meghívása elmaradhat J.Zs.Cs.: Vizuális programozás (c) 2013
Paraméterek átadása • Első paraméter konvencionálisan a közzétevő objektum:object sender, mert egy eseménykezelő több objektum eseményeire is figyelhet • A további paramétereket egy objektum adattagjaiként kell átadni, ennek osztálya az EventArgs leszármazottja kell legyen • Létre kell hozni hozzá egy osztályt J.Zs.Cs.: Vizuális programozás (c) 2013
Mit nyújt? • biztosítja az eszközöket osztott web alkalmazások fejlesztéséhez • nyelvfüggetlen programozási modellt biztosít • támogatja a web-es protokollokat (HTTP, XML, XPath, SOAP) • ingyenesen letölthető • egységes felület, egyazon osztályhierarchia több nyelvből is elérhető • egy alkalmazás különböző részeit más célorientált nyelveken is írhatják • különböző nyelvekben járatos programozók „olcsón” (kis ráfordítással) képesek együttműködni egy projektben – RAD megvalósítása J.Zs.Cs.: Vizuális programozás (c) 2013
A .NET fejlesztői platform Entity framework 3.5 LINQ WCS 3.0 WPF WCF WWF Windows Forms ASP.NET ADO.NET .NET 2.0 Base Class Library Common Language Runtime J.Zs.Cs.: Vizuális programozás (c) 2013
Common Language Runtime Osztálykönyvtár-kiszolgálás Szálkezelő COM Marshaler Típusellenőrző Kivételkezelő Biztonsági motor Hibakereső motor IL NatívJIT-fordítók Kódkezelő Szemétgyűjtő Osztálybetöltő J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]
Használat • a programok futtatásához szükség van a keretrendszerre (.Net Framework) • a MS jelenleg saját operációs rendszereire fejleszti • MS Rotor - FreeBSD • Mono (www.go-mono.com) 2.6.3 • DotGnu (www.gnu.org/projects/dotgnu) 0.1 J.Zs.Cs.: Vizuális programozás (c) 2013
Fordítás - futtatás • A fordítási folyamat eredményeképpen keletkező állomány megtévesztő módon exe kiterjesztést visel, de • ez egy bájtkód MS Intermediate Language-ben • végrehajtáskor egy JIT fordító állítja elő ebből a gépi kódot J.Zs.Cs.: Vizuális programozás (c) 2013
Felügyelt kódFordítás és végrehajtás Fordítás Forráskód(.cs, .vb, …) Nyelvi fordító Kód (IL) + Metaadatok(.dll, .exe) Végrehajtás JIT fordító Szerelvény Natív kód Telepítéskor vagy a metódus első meghívásakor J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]
Robosztusés biztonságosFelügyelt kód • Felügyelt köztes kód: • Ellenőrizhető • Kötelező metainformációk • Processzor és architektúra független • Kiértékelő verem alapú • A kód szigorú típusellenőrzésnek vethető alá • Megszűnnek a leggyakoribb hibaforrások • ellenőrizetlen veszélyestípusváltások, mutatóbűvészkedések • inicializálatlan változók, tömbből kilógó indexek • Kivételkezelés • Nyelvi szinten és a CLR-ben definiált hibakezelés • Integrálódik a Windows strukturált kivételkezelésével is (SEH) J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]
Robosztusés biztonságosFelügyelt adatok • Felügyelt adat • Automatikus élettartam-felügyelet • Minden.NET objektumot a GC takarít el • GC: garbage collector – a szemetes • Nincs elfelejtett mutató vagy korai delete hívás • a cirkuláris hivatkozások nem okoznak gondot • Modern, önhangoló GC algoritmusok • a felhasználói interfész nem akad meg • jó szerver oldali átbocsátóképesség J.Zs.Cs.: Vizuális programozás (c) 2013 Forrás: [1]
Fejlesztőeszközök • Elvileg akár a jegyzettömbben is megírhatjuk programunkat, és lefordíthatjuk azt a keretrendszerbe beépített csc nevű fordítóval • SharpDevelop 3.2 – a C# és a VB.NET projektekhez http://www.icsharpcode.net/OpenSource/SD/ • MonoDevelop 2.2http://monodevelop.com J.Zs.Cs.: Vizuális programozás (c) 2013
SharpDevelop J.Zs.Cs.: Vizuális programozás (c) 2013 http://www.icsharpcode.net/OpenSource/SD/
ILDASM Start menü/Programok/ Microsoft Visual Studio 2008/ Visual Studio Tools/ Visual Studio 2008 Command Prompt J.Zs.Cs.: Vizuális programozás (c) 2013