1 MSDN == Microsoft Developer Network Library je živá (tj. webová) dokumentace ke všem produkt ů m tohoto softwarového giganta. Na webu je př ístupná každému zdarma. Verze na CD (3CD, resp. další 3CD pro archivní verzi) nebo na DVD obsahuje samostatnou aplikaci, která se propojí s Visual Studiem a slouží jako interaktivní nápově da. Jako taková je tato knihovna souč ástí Visual Studia, ovšem její aktuálnost odpovídá době uvedení produktu na trh. Opravdoví vývojář i softwaru dají př ednost nákupu ně jaké verze MSDN př edplatného, kdy MSDN Library je pravidelně č tvrtletně aktualizována. Na obrázku je vidě t strom MSDN Library, rozbalený nad refenrenč ní dokumentací jednotlivých prostor ů jmen FCL Framework Class Library.
2 Vaše první aplikace pro.net Framework Bude v C# a tradice velí již desítky let co existuje C a jeho potomci, že to musí být Hello, World. Je tomu tak proto, že tímto př íkladem zač ínala kniha o C od Briana W. Kernighana a Dennise M. Ritchieho s titulem The C Programming Language. 1 První aplikaci je vhodné napsat v Notepadu. Na uč ebně budeme používat Total Commander. Nejdř íve v domovském adresář i C:\Documents and Settings\student\My Documents založte vhodné podaresář e např. C:\Documents and Settings\student\My Documents\DotNet\MojeJmeno a pokud nechcete lozit po stromech, nezapomeň te si udě lat zkratku t.j. zmáč kně te Ctrl+D a př idejte aktuální adresář. Nyní zmáč kně te Shift+F4 a vepište a do Notepadu napište 1 Mimochodem originální hello.c vypadá takto: #include <stdio.h> main() { printf("hello, world\n"); }
3 a uložte. Nyní chceme kompilovat z př íkazové ř ádky. Kompilátor C# se jmenuje csc.exe, ale není k ně mu nastavena automaticky cesta. Pokud máte nainstalované Visual Studio, nastavíte cesty ke všem nástroj ů m spuště ním dávky vsvars32.bat, odkaz na ni je př ímo v nabídce Start/All Programs/Microsoft Visual Studio.Net 2003/ Microsoft Visual Studio.Net Tools/ Visual Studio.Net 2003 Command Prompt csc Hello.cs Na uč ebně doporuč uji zavě sit si nejdř íve na lištu Total Commanderu vsvars32.bat jako př íkazové tlač ítko (zavě ste si kafe) a nezapomeň te doplnit vhodnou ikonu.
4 Výhoda je v tom, že pokud nyní spustíte vsvars32.bat pomocí tohoto tlač ítka, z ů stanete v adresář i nastaveném Total Commanderem. Vepište csc Hello.cs a zmáč kně te Enter: Př íkaz je ekvivalentní tomuhle podrobně jšímu
Ř 5 csc /target:exe /out:hello.exe Hello.cs místo /target lze ovšem psát jen /t. Př íkaz spustí C# kompilátor a ten vyrobí spustitelný program v mezijazyce (tzv. ř ízený kód) se jménem Hello.exe. Pokud nyní Hello spustíme, automaticky bude CIL kód dale kompilován JIT Just In Time kompilátorem do nativního kódu a spuště n: Je na č ase náš kód objasnit, nep ů jdeme ovšem zatím do hloubky. 1. using System; 2. 3. class MyApp 4. { 5. static void Main () 6. { 7. Console.WriteLine ("Hello, world"); 8. } 9. } Protože vě tšina z Vás dosud používala pro programování jazyk Pascal, je tř eba zd ů raznit základní odlišnosti: Malá a velká písmena jsou všemi jazyky rodiny C (C# nevyjímaje) rozlišována! System a system jsou dva odlišné identifikátory. Pro vytvář ení blok ů kódu se v rodině C používají složené závorky. V Pascalu begin a end, v C# { a }. etě zce se v C jazycích ale např. i ve Visual Basicu uzavírají do uvozovek. Klasický Object Pascal z Delphi nezná prostory jmen, př ipravovaná.netová verze je znát musí. C# je stejně jako Sun Java a na rozdíl od Object Pascalu a C++ d ů sledně objekový jazyk, t.j. nezná procedury a funkce nezabalené do tř íd. Na druhou stranu ovšem vidíme i jednu společ nou vě c a totiž, že C-jazyky ukonč ují př íkaz stř edníkem. To neplatí ovšem pro jiný velmi rozšíř ený.net jazyk Visual Basic, který umožň uje ukonč ovat př íkazy novým ř ádkem, pro pokrač ování př íkazu na dalším ř ádku se potom používá podtrženítko. Na 1. ř ádku výpisu kódu je použita direktiva using, která právě souvisí se skuteč ností, že.net (CLR Common Language Runtime, CLS Common Language Specification) d ů sledně používá prostory jmen (namespace). Prostory jmen jsou v C# podobně jako
ů 6 v C++, prostř edkem napomáhajícím spravovat i velmi velké softwarové projekty (a o to dnes jde). Jejich použití m ů žeme př ipodobnit adresář ové struktuř e. Historicky existovaly primitivní operač ní systémy, které ještě nemě ly adresář ový strom. Např. takový byl systém CP/M 2. Tak pokud jste potř ebovali na CP/M uložit soubor pod názvem inventar.txt a soubor s tímto jmenem již existoval, došlo ke kolizi. Pokud jste kompletovali soubory z více disket, byl to nepř íjemný problém. Kdo mě l v té době PDP s prvním Unixem nebo nový DOS s adresář ovým stromem, vyř ešil problém vytvoř ením podadresář se jmény podle datových zdroj ů (např. Dilna1, Dilna2, Uctarna,...). Totéž a daleko nepř íjemně jším zp ů sobem se m ů že stát identifikátor ů m zejména v rozsáhlých projektech s použitím externího kódu (cizí knihovny). Samozř ejmě se nejdř ív musí urč it pravidla. Např. se doporuč uje, aby souč ástí identifikace byl unikátní název firmy, pak projektu atd. Identifikátory by tak mě ly být celosvě tově unikátní. Protože identifikátory mají být sebepopisné, vede toto pravidlo k velmi dlouhým názv ů m. Např. VUTBrnoFSIUMMating2R2003MMP3FrantaHelloApp což je velmi nepraktické (poznamenejme, že ně kdy i nemožné max. délka bývala omezená). Dobř e víte, jak to ř eší adresář ový strom souborového systému. Existuje možnost zadávat jen relativní cesty. Stejně tak je to s prostory jmen. Direktiva using System; prostě znamená, že identifikátory se budou vyhledávat v prostou jmen System. Kdybychom tuto direktivu neuvedli, museli bychom ř ádek 6. psát takto: 7. System.Console.WriteLine ("Hello, world"); Jazyky rodiny C nerozlišují jako Pascal procedury a funkce a proto pro ně nepotř ebují klíč ové slovo (Procedure, Function). Vlastně znají jen funkce, takže se vždy musí deklarovat návratová hodnota. Pokud to není potř eba, uvede se jako typ návratové hodnoty void. Procedury (ř íkám zatím procedury obecně ve smyslu procedurálního programování) však, jak už jsem ř ekl, nemohou v d ů sledně objektovém prostř edí být deklarovány mimo tř ídu a proto se jim ř íká metody (dané tř ídy). Náš program proto musí obsahovat deklaraci tř ídy 3. class MyApp v jejímž tě le (v bloku mezi složenými závorkami) vidíme deklaraci jediné metody 5. static void Main () 2 Pro CP/M ostatně vznikl první př ekladač Borland Pascal od Anders Hejlsberga, rovně ž hlavního autora Delphi. Nyní je Anders Hejlsberg jedním z hlavních architektů Microsoft iniciativy.net, u MS př itom již př edtím pracoval u MS na Visual Javě.
7 Atribut static je zde velmi d ů ležitý. Znamená to, že statická metoda (funkce, chcete-li) je ně co jako klasická funkce, kterou lze zavolat bez toho, že bych vyrobil tzv. instanci tř ídy (objekt). Takže tř ída funguje jen jako obálka, jmenný prostor. Metodu Main() bych zavolal MyApp.Main(); Ale takový kód nikde neuvidíte, metoda Main() a její př etížené varianty se nikdy nevolá z kódu programátora, ale naopak tvoř í vstupní bod pro CLR, které př i spuště ní aplikace metodu JIT př eloží do nativního kódu a spustí. Definici metody Main() najdeme v bloku na jediném ř ádku 7. Console.WriteLine ("Hello, world"); kterému již asi rozumíme. Volá se statická metoda WriteLine tř ídy Console ze jmenného prostoru System Framework Class Library (FCL), která vypíše text v uvozovkách do č erného konzolového okna. Zkušenost s ř ízeným kódem ukonč íme pohledem na mezijazyk CIL, který nám poskytne nástroj SDK ildasm (disassembler mezijazyka IL).
8 Konzolová aplikace ve Visual Studiu Z hlavní nabídky nebo pomocí Ctrl+Shift+N spustíme pr ů vodce novým projektem, vybereme C# jako jazyk projektu, Console Application jako typ projektu a stiskneme tlač ítko OK. V editoru dopíšeme kód Console.WriteLine ("Hello, world"); A pomocí Ctrl+F5 aplikaci spustíme.
9