Table Of ContentStudentlitteratur 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