Studentlitteratur 155x223-Stone-2001-10-12 Anders Forsberg Programmering i 9/12 68mm 10/13 71mm C# 11/14,5 76mm C M Y K 220mm 223mm 31150 tit tr.fm 4 dec 2002 12.38:18 sida 1 av 2 Studentlitteratur 155x223-Stone-2001-10-12 9/12 68mm 10/13 71mm 11/14,5 76mm KOPIERINGSFÖRBUD Detta verk är skyddat av lagen om upphovsrätt. Kopiering, utöver lärares rätt att kopiera för undervisningsbruk enligt BONUS-Presskopias avtal, är förbjuden. Sådant avtal tecknas mellan upphovsrättsorganisationer och huvudman för utbildningsanordnare t.ex. kommuner/universitet. För information om avtalet hänvisas till utbildningsanordnarens huvudman eller BONUS-Presskopia. Den som bryter mot lagen om upphovsrätt kan åtalas av allmän åklagare och dömas till böter eller fängelse i upp till två år samt bli skyldig att erlägga ersättning till upphovsman/rättsinnehavare. Denna trycksak är miljöanpassad, både när det gäller papper och tryckprocess. Art.nr 31150 ISBN 978-91-44-05300-4 © Anders Forsberg och Studentlitteratur 2003 Omslagsbild: DigitalVision Omslagslayout: Pernilla Eriksson Printed in Sweden Studentlitteratur, Lund Webbadress: www.studentlitteratur.se Tryckning/år 1 2 3 4 5 6 7 8 9 10 2007 06 05 04 03 C M Y K 220mm 223mm 31150 tit tr.fm 4 dec 2002 12.38:18 sida 2 av 2 Studentlitteratur 155x223-Stone-2000-05-05 Innehåll 9/12 68mm 10/13 71mm Inledning 7 11/14,5 76mm 1 En infrastruktur för programutveckling 11 1.0.1 Hello World! 13 1.0.2 Komponentorientering 15 1.0.3 Standarder 17 1.1 Typkategorier 18 1.2 Klassbibliotek 22 1.3 Mellanformat med metainformation 25 1.4 Skräpsamling 28 2 Inledande detaljer 31 2.0.1 Variabler 32 2.0.2 Kommentarer 33 2.0.3 Literaler 34 2.1 IO och strängar 34 2.1.1 Strängar 36 2.1.2 Inläsning 37 2.2 Main-metoden 39 2.3 Typomvandlingar 40 2.4 Operatorer 43 2.5 Vektorer 49 2.6 Uttryck och satser 52 2.6.1 If-satsen 53 2.6.2 Switch-satsen 54 2.6.3 While-satsen 56 2.6.4 Do-while-satsen 58 2.6.5 For-satsen 58 C 2.6.6 Foreach-satsen 59 2.7 XML-kommentarer 61 M Y Kopiering av kurslitteratur förbjuden. © Studentlitteratur 3 K 220mm 223mm 31150TOC.fm 20 nov 2002 13.19:46 sida 3 av 6 Studentlitteratur 155x223-Stone-2000-05-05 3 Klasser 63 3.1 Inkapsling och datagömning 64 3.2 Fält 66 3.3 Konstruktorer 69 3.3.1 Flera konstruktorer 71 3.3.2 UML-notation 74 3.4 Metoder 76 3.4.1 Statiska metoder och instansmetoder 80 9/12 3.4.2 Klassen Rational 82 68mm 10/13 71mm 3.5 Egenskaper 85 11/14,5 76mm 3.5.1 Egenskap som förenklad konstruktor 87 3.6 Operatorer 89 3.6.1 Design 90 3.6.2 Indexoperatorn 92 3.6.3 Klassen Rational 94 3.7 Typomvandlare 98 3.8 Destruktor 102 3.8.1 Designmönstret Dispose 104 4 Arv och dynamisk bindning 107 4.1 Arv kontra aggregering 111 4.1.1 Terminologi 113 4.2 Konstruktorer och destruktor 114 4.3 Typomvandling 118 4.4 Virtuella metoder 121 4.5 Abstrakta basklasser 123 4.6 Interface 125 4.6.1 Synlighet 128 4.6.2 Statisk och dynamisk bindning 130 4.6.3 Standardinterface 132 4.7 Arvet från Object 135 4.7.1 GetHashCode och ToString 137 4.7.2 Att jämföra objekt 138 4.7.3 Att kopiera objekt 142 4.7.4 Tillämpning 143 5 Structer 145 C 5.1 Skillnader mot klasser 146 5.1.1 Egendefinierade structer 148 M Y 4 Kopiering av kurslitteratur förbjuden. © Studentlitteratur K 220mm 223mm 31150TOC.fm 20 nov 2002 13.19:46 sida 4 av 6 Studentlitteratur 155x223-Stone-2000-05-05 5.1.2 Klassen Rational 150 5.1.3 Structen Rational 156 5.2 Enum 161 5.3 Boxing 163 6 Undantag 167 6.1 Kasta undantag 168 6.1.1 Klassen Rational 170 9/12 6.2 Hantera undantag 172 68mm 10/13 71mm 6.3 Design 176 11/14,5 76mm 7 Delegerare och notifierare 179 7.1 Anrop via delegerare 180 7.1.1 Anrop till flera metoder 182 7.1.2 Publicerare och prenumeranter 184 7.2 Anrop via notifierare 187 7.2.1 Fönstersystem 188 7.2.2 Notifierare i interface 189 7.3 Parametrar 190 8 Attribut 195 8.1 Läsa attribut 199 8.2 Egna attribut 201 8.3 Attribut till attribut 203 9 Pekare och osäker kod 205 10 Klassbiblioteket 211 10.1 System 213 10.2 System.Collections 219 10.2.1 System.Collections.Specialized 224 10.3 System.IO 225 10.4 System.Net 231 10.4.1 System.Net.Sockets 237 10.5 System.Threading 241 10.5.1 Synkronisering 245 10.5.2 Asynkron programmering 248 C 10.6 System.Text 253 10.7 System.Xml 256 M Y Kopiering av kurslitteratur förbjuden. © Studentlitteratur 5 K 220mm 223mm 31150TOC.fm 20 nov 2002 13.19:46 sida 5 av 6 Studentlitteratur 155x223-Stone-2000-05-05 10.8 System.Globalization 261 10.9 System.Diagnostics 262 10.10System.Reflection 263 10.11System.Runtime 266 10.11.1System.Runtime.CompilerServices 266 10.11.2System.Runtime.InteropServices 267 10.12System.Security 269 10.12.1System.Security.Permissions 271 9/12 68mm 10/13 71mm Sakregister 275 11/14,5 76mm C M Y 6 Kopiering av kurslitteratur förbjuden. © Studentlitteratur K 220mm 223mm 31150TOC.fm 20 nov 2002 13.19:46 sida 6 av 6 Studentlitteratur 155x223-Stone-2000-05-05 Inledning Inledning 9/12 68mm 10/13 71mm Det är inte varje dag man får tillfälle att se ett nytt världsspråk 11/14,5 76mm födas. Senast det hände var då James Gosling och Green Team inom Sun utvecklade en förenklad C++ avsedd för inbyggda system. Utan att de riktigt visste om det då, skulle deras språk Java bli ett av de absolut största på bara några år. De började 1991, lanserade språket officiellt 1995 och ett par år senare var det en världsomfattande rörelse. C och C++ däremot, föddes extremt långsamt under 1980- och 1990-talen. Åtskilliga varianter kom i användning långt innan de blev standardiserade 1988 respektive 1997. Samtidigt har inga andra språk haft sådant djupgående inflytande över andra språk som dessa båda nära släktingar. Inom väldens största mjukvaruutvecklare Microsoft har C++ länge varit standardspråk. Microsofts anammande av Java blev aldrig någon riktigt ömsesidig kärlek. Java för Windows måste anpassas till objektmodellen COM och Windows fönstersystem, och den plattformsoberoende ideologin i Java utsattes för övergrepp, tyckte Javasamfundet. 1996 värvades Anders Hejlsberg från Borland till Microsoft. Han är en av väldens mest kända språkutvecklare. Som ”Chief Architect” ledde han en arbetsgrupp som år 2000 presenterade det nya språket C# (C sharp). Som programutvecklare och lärare i C++ med huvudsaklig hemvist i Windowsapplikationer reagerade jag genast då jag i ett nyhetsbrev från Microsoft såg de första planerna på utvecklingen av ett nytt språk. Sedan dess har jag plöjt tusentals sidor preliminär dokumen- C tation som varit motstridig och tröttsam, men som efterhand klar- nat och numera utgör en någorlunda (!) klar och sammanhängande M Y Kopiering av kurslitteratur förbjuden. © Studentlitteratur 7 K 220mm 223mm C Sharp.fm 25 nov 2002 15.24:18 sida 7 av 274 Studentlitteratur 155x223-Stone-2000-05-05 Inledning bild av något som måste betecknas som en hel teknikgeneration inom mjukvaruutveckling. När jag håller kurser i C#-programmering är det inte ovanligt att inbitna Javamänniskor invänder att ”detta är stulet från Java” och ”det där är också stulet från Java”. Naturligtvis är det så! Liksom mycket i Java är stulet från C++ och Smalltalk, och mycket i C++ är stulet från C, som stal det från... 9/12 Utvecklingen går vidare. C# är nyare, ännu mera objektorienterat 68mm 10/13 71mm och ännu bättre än Java. Det har Javas förenklingar, men mera av 11/14,5 76mm C++ flexibilitet. Det har åtskilliga populära mekanismer även från andra språk, exmpelvis från VB! Bara att ta till sig och dra nytta av. Denna bok beskriver C# och den underliggande infrastruktur som heter Common Language Infrastructure (CLI) och som är standardi- serad i ECMA- och (sannolikt då detta läses) ISO-standarder. Den beskriver alltså inte Microsofts ursprungliga och mångdubbelt större företeelse kallad .NET (dotnet). .NET är att se som en implementation av CLI, och vid denna boks tryckning pågår flera stora projekt för att implementera CLI och C# för andra plattformar. Leta gärna lite på nätet efter information om exempelvis Mono-projektet för Linux! Bruksanvisning Boken är tänkt att kunna läsas från början till slut. Kanske inte direkt som en spännande roman, men ändå som en sammanhäng- ande historia. Den är alltså inte referensmässig, och kapitlen är inte fristående utan förutsätter varann. Den bör vara en utmärkt kurs- bok. För att använda boken som kursbok bör läraren besöka www.graf- pro.se, där (med tiden) allt kompletterande och nödvändigt mate- rial finns: laborationer med lösningsförslag, samt OH-bilder för undervisningen. Där mottages också tacksamt synpunkter och tips om rättelser eller justeringar. C M Y 8 Kopiering av kurslitteratur förbjuden. © Studentlitteratur K 220mm 223mm C Sharp.fm 25 nov 2002 15.24:18 sida 8 av 274 Studentlitteratur 155x223-Stone-2000-05-05 Inledning För akademisk nivå lämpar sig boken för B- eller C-nivå som till- lämpning i objektorienterad och komponentorienterad programut- veckling. Med fördel kan den studeras parallellt med en kurs i objektorienterad analys och design, eller i objektorienterade design- mönster. Terminologi och notation ansluter till UML. För den redan yrkesverksamme programutvecklaren gäller att kun- nande i Java eller C++ gör boken lättläst och man kan då rent av skumma vissa delar. Bakgrund i Smalltalk gör också boken ganska 9/12 68mm 10/13 lättläst. Även annat bakgrundskunnande kan underlätta, om än 71mm 11/14,5 inte lika mycket. Funktionsorienterade språk – särskilt C – har syn- 76mm taxmässiga likheter, men för den med C-bakgrund kan de objekt- orienterade idéerna och terminologin bli delvis ny och obekant. Objektorientering introduceras inte i boken utan förutsätts någor- lunda bekant. Boken är alltså inte avsedd som introduktion till programmering. För den som inte har datavetenskapliga grunder blir den nog ett rik- tigt sömnpiller. Disposition Dispositionen är i stora drag den, att det första kapitlet beskriver språkets nära samhörighet med CLI-standarden. Språket är en till- lämpning av det generella typsystem som är det centrala i CLI, och det är min övertygelse att man ska inse det innan man tar itu med de tusen detaljerna. Därefter gås de tusen detaljerna igenom, och om C# inte är det för- sta språk man lär sig så är det inte så jobbigt som det låter. Detta språk kännetecknas ju av att ha de populäraste språkmekanismerna från flera andra språk. Onödigt många kan tyckas, men därmed känner man igen sig om man har någon erfarenhet från språk sär- skilt i C-familjen. De följande kapitlen tar sedan upp ett problemområde i sänder: klasser, arv, structer, undantag, delegerare, attribut. C M Y Kopiering av kurslitteratur förbjuden. © Studentlitteratur 9 K 220mm 223mm C Sharp.fm 25 nov 2002 15.24:18 sida 9 av 274 Studentlitteratur 155x223-Stone-2000-05-05 Inledning I det sista, ganska stora kapitlet behandlas klassbiblioteket så som det är indelat i namnrymder. Den indelningen motsvarar applika- tionsområden såsom trådar, IO-hantering, samlingar, etcetera och är därmed en god indelningsgrund för tillämpningar av tidigare kapitel. Samtidigt är det åtminstone en inledande bruksanvisning till klassbiblioteket. Men man bör vara medveten om att de 294 datatyperna och de designmönster de implicerar är ämne för många hundra sidor till. Kanske i en kommande upplaga... 9/12 68mm 10/13 En liten brasklapp om kodexemplen måste infogas här. I amerikan- 71mm 11/14,5 ska böcker påpekas ofta att alla kodexempel är kompletta och kör- 76mm bara program för realistiska problem. Det brukar innebära oändliga listor där det viktiga utgör en bråkdel och läsaren hoppar därför över hela kodlistorna. I denna bok har jag valt den motsatta princi- pen. Kodexemplen är fragmentariska och visar bara just den språk- mekanism eller det lilla stycke programlogik som är aktuell. Kom- mentarer, omgivande klasser och namnrymder, nödvändiga deklarationer m.m. som måste finnas för att göra koden kompiler- bar saknas oftast, för att inte trötta läsaren med upprepningar. På websidan www.grafpro.se däremot, finns kompletta kodexempel. Till sist vill jag rikta ett par stora tack, dels till hustrun Anette och dels till kollegan Harald Lüning, för ovärderlig hjälp med gransk- ning av manuset i språklig respektive innehållslig aspekt. För even- tuella felaktigheter måste tyvärr ändå författaren påta sig hela skul- den. Kalmar i november 2002 Anders Forsberg C M Y 10 Kopiering av kurslitteratur förbjuden. © Studentlitteratur K 220mm 223mm C Sharp.fm 25 nov 2002 15.24:18 sida 10 av 274