0% found this document useful (0 votes)
49 views

Programming c#1

C# is a programming language designed for Microsoft's .NET platform. The chapter introduces C#, discussing what problems it was designed to solve and how its syntax draws from C and C++. It also covers the .NET Framework Class Library, which provides crucial functionality to C# developers through utility classes, wrappers for Windows functionality, and frameworks. The chapter presents a "Hello World" example to illustrate using the Console class from the library.

Uploaded by

ilie_vlassa
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
49 views

Programming c#1

C# is a programming language designed for Microsoft's .NET platform. The chapter introduces C#, discussing what problems it was designed to solve and how its syntax draws from C and C++. It also covers the .NET Framework Class Library, which provides crucial functionality to C# developers through utility classes, wrappers for Windows functionality, and frameworks. The chapter presents a "Hello World" example to illustrate using the Console class from the library.

Uploaded by

ilie_vlassa
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 50

CHAPTER 1

Introducing C#

&SURQRXQFHG 6HH 6KDUSLV D SURJUDPPLQJ ODQJXDJH GHVLJQHG IRU 0LFUR


VRIWV1(7SODWIRUP6LQFHLWVILUVWUHOHDVHLQ&KDVIRXQGPDQ\UROHV,WLV
ZLGHO\XVHGRQWKHVHUYHUVLGHRIZHEVLWHVDQGDOVRRQERWKWKHFOLHQWDQGVHUYHULQ
OLQHRIEXVLQHVV:LQGRZVGHVNWRSDSSOLFDWLRQV<RXFDQZULWHVPDUWSKRQHXVHULQWHU
IDFHVDQG;ER[JDPHVLQ&0RUHUHFHQWO\0LFURVRIWV6LOYHUOLJKWSODWIRUPKDV
PDGH&DQRSWLRQIRUZULWLQJ5LFK,QWHUQHW$SSOLFDWLRQVWKDWUXQLQDZHEEURZVHU
%XW ZKDW NLQG RI ODQJXDJH LV &" 7R XQGHUVWDQG D ODQJXDJH ZHOO HQRXJK WR XVH LW
HIIHFWLYHO\LWVQRWHQRXJKWRIRFXVSXUHO\RQWKHGHWDLOVDQGPHFKDQLVPVDOWKRXJK
ZHOOEHVSHQGLQJSOHQW\RIWLPHRQWKRVHLQWKLVERRN,WLVHTXDOO\LPSRUWDQWWRXQ
GHUVWDQGWKHWKLQNLQJEHKLQGWKHGHWDLOV6RLQWKLVFKDSWHUZHOOORRNDWZKDWSUREOHPV
&ZDVEXLOWWRVROYH7KHQZHOOH[SORUHWKHVW\OHRIWKHODQJXDJHWKURXJKDVSHFWV
WKDWGLVWLQJXLVKLWIURPRWKHUODQJXDJHV$QGZHOOILQLVKWKHFKDSWHUZLWKDORRNDWWKH
ODWHVWVWHSLQWKHHYROXWLRQRI&LWVIRXUWKYHUVLRQ

Why C#? Why .NET?


3URJUDPPLQJODQJXDJHVH[LVWWRKHOSGHYHORSHUVEHPRUHSURGXFWLYH0DQ\VXFFHVVIXO
ODQJXDJHVVLPSOLI\RUDXWRPDWHWHGLRXVWDVNVWKDWSUHYLRXVO\KDGWREHGRQHE\KDQG
6RPHRIIHUQHZWHFKQLTXHVWKDWDOORZROGSUREOHPVWREHWDFNOHGPRUHHIIHFWLYHO\RU
RQDODUJHUVFDOHWKDQEHIRUH+RZPXFKGLIIHUHQFH&FDQPDNHWR\RXZLOOGHSHQG
RQ\RXUSURJUDPPLQJEDFNJURXQGRIFRXUVHVRLWVZRUWKFRQVLGHULQJZKDWVRUWVRI
SHRSOHWKHODQJXDJHGHVLJQHUVKDGLQPLQGZKHQWKH\FUHDWHG&
&LVDLPHGDWGHYHORSHUVZRUNLQJRQWKH:LQGRZVSODWIRUPDQGLWVV\QWD[LVLQVWDQWO\
IDPLOLDUWRXVHUVRI&RU&RURWKHUODQJXDJHVWKDWGUDZIURPWKHVDPHWUDGLWLRQ
VXFKDV-DYD6FULSWDQG-DYD)XQGDPHQWDOODQJXDJHHOHPHQWVVXFKDVVWDWHPHQWVH[
SUHVVLRQVIXQFWLRQGHFODUDWLRQVDQGIORZFRQWURODUHPRGHOHGDVFORVHO\DVSRVVLEOH
RQWKHLUHTXLYDOHQWVLQ&IDPLO\ODQJXDJHV

$IDPLOLDUV\QWD[LVQRWHQRXJKRIDUHDVRQWRSLFNDODQJXDJHRIFRXUVHVR&RIIHUV
SURGXFWLYLW\HQKDQFLQJIHDWXUHVQRWIRXQGLQVRPHRILWVSUHGHFHVVRUV*DUEDJHFRO
OHFWLRQIUHHVGHYHORSHUVIURPWKHW\UDQQ\RIFRPPRQPHPRU\PDQDJHPHQWSUREOHPV
VXFKDVPHPRU\OHDNVDQGFLUFXODUUHIHUHQFHV9HULILDEOHW\SHVDIHW\RIFRPSLOHGFRGH
UXOHVRXWDZLGHUDQJHRIEXJVDQGSRWHQWLDOVHFXULW\IODZV:KLOH&RU&:LQGRZV
GHYHORSHUVPD\QRWEHDFFXVWRPHGWRWKRVHIHDWXUHVWKH\ZLOOVHHPROGKDWWR-DYD
YHWHUDQV EXW -DYD KDV QRWKLQJ WR FRPSHWH ZLWK WKH /,14 IHDWXUHV & RIIHUV IRU
ZRUNLQJZLWKFROOHFWLRQVRILQIRUPDWLRQZKHWKHULQREMHFWPRGHOV;0/GRFXPHQWV
RUGDWDEDVHV,QWHJUDWLQJFRGHIURPH[WHUQDOFRPSRQHQWVLVUHPDUNDEO\SDLQOHVVHYHQ
WKRVH ZULWWHQ LQ RWKHU ODQJXDJHV & DOVR LQFRUSRUDWHV VXSSRUW IRU IXQFWLRQDO SUR
JUDPPLQJDSRZHUIXOIHDWXUHSUHYLRXVO\PRVWFRPPRQO\VHHQLQDFDGHPLFODQJXDJHV
0DQ\ RI WKH PRVW XVHIXO IHDWXUHV DYDLODEOH WR & GHYHORSHUV FRPH IURP WKH 1(7
)UDPHZRUN ZKLFK SURYLGHV WKH UXQWLPH HQYLURQPHQW DQG OLEUDULHV IRU & DQG DOO
RWKHU1(7ODQJXDJHVVXFKDV9%1(7&ZDVGHVLJQHGIRU1(7DQGRQHRIWKH
PDLQEHQHILWVRILWVFORVHUHODWLRQVKLSZLWKWKH1(7)UDPHZRUNLVWKDWZRUNLQJZLWK
IUDPHZRUNIHDWXUHVVXFKDVWKHFODVVOLEUDU\IHHOVYHU\QDWXUDO

The .NET Framework Class Library


:RUNLQJ LQ & PHDQV PRUH WKDQ XVLQJ MXVW WKH ODQJXDJHWKH FODVVHV RIIHUHG E\
WKH1(7)UDPHZRUNDUHDQH[WUHPHO\LPSRUWDQWSDUWRIWKH&GHYHORSHUVHYHU\GD\
H[SHULHQFH DQGWKH\DFFRXQWIRUDORWRIWKLVERRNVFRQWHQW 0RVWRIWKHOLEUDU\IXQF
WLRQDOLW\IDOOVLQWRRQHRIWKUHHFDWHJRULHVXWLOLW\IHDWXUHVZULWWHQLQ1(7ZUDSSHUV
DURXQG:LQGRZVIXQFWLRQDOLW\DQGIUDPHZRUNV
7KHILUVWJURXSFRPSULVHVXWLOLW\W\SHVVXFKDVGLFWLRQDULHVOLVWVDQGRWKHUFROOHFWLRQ
FODVVHVDVZHOODVVWULQJPDQLSXODWLRQIDFLOLWLHVVXFKDVDUHJXODUH[SUHVVLRQHQJLQH
7KHUHDUHDOVRIHDWXUHVWKDWRSHUDWHRQDVOLJKWO\ODUJHUVFDOHVXFKDVWKHREMHFWPRGHOV
IRUUHSUHVHQWLQJ;0/GRFXPHQWV
6RPHOLEUDU\IHDWXUHVDUHZUDSSHUVDURXQGXQGHUO\LQJ26IXQFWLRQDOLW\)RUH[DPSOH
WKHUHDUHFODVVHVIRUDFFHVVLQJWKHILOHV\VWHPDQGIRUXVLQJQHWZRUNIHDWXUHVVXFKDV
VRFNHWV$QGWKHUHDUHFODVVHVIRUZULWLQJRXWSXWWRWKHFRQVROHZKLFKZHFDQLOOXVWUDWH
ZLWK WKH REOLJDWRU\ ILUVW H[DPSOH RI DQ\ SURJUDPPLQJ ODQJXDJH ERRN VKRZQ LQ
([DPSOH
([DPSOH7KHLQHYLWDEOH+HOORZRUOGH[DPSOH
class Program
{
static void Main()
{
System.Console.WriteLine("Hello, world");
}
}

2 | Chapter 1:Introducing C#

:HOOH[DPLQHDOOWKHSLHFHVVKRZQKHUHLQGXHFRXUVHEXWIRUQRZQRWHWKDWHYHQWKLV
VLPSOHVWRIH[DPSOHVGHSHQGVRQDFODVVIURPWKHOLEUDU\WKHSystem.ConsoleFODVVLQ
WKLVFDVHWRGRLWVMRE
)LQDOO\WKHFODVVOLEUDU\RIIHUVZKROHIUDPHZRUNVWRVXSSRUWEXLOGLQJFHUWDLQNLQGVRI
DSSOLFDWLRQV)RUH[DPSOH:LQGRZV3UHVHQWDWLRQ)RXQGDWLRQ :3) LVDIUDPHZRUN
IRUEXLOGLQJ:LQGRZVGHVNWRSVRIWZDUH$631(7 ZKLFKLVQRWDQDFURQ\PGHVSLWH
DSSHDUDQFHV LVDIUDPHZRUNIRUEXLOGLQJZHEDSSOLFDWLRQV1RWDOOIUDPHZRUNVDUH
DERXWXVHULQWHUIDFHV:LQGRZV&RPPXQLFDWLRQ)RXQGDWLRQ :&) LVGHVLJQHGIRU
EXLOGLQJVHUYLFHVDFFHVVHGRYHUWKHQHWZRUNE\RWKHUFRPSXWHUV\VWHPVIRULQVWDQFH
7KHVHWKUHHFDWHJRULHVDUHQRWVWULFWDVTXLWHDIHZFODVVHVILWLQWRWZR)RUH[DPSOH
WKHSDUWVRIWKHFODVVOLEUDU\WKDWSURYLGHDFFHVVWRWKHILOHV\VWHPDUHQRWMXVWWKLQZUDS
SHUVDURXQGH[LVWLQJ:LQ$3,V7KH\DGGQHZREMHFWRULHQWHGDEVWUDFWLRQVSURYLG
LQJVLJQLILFDQWIXQFWLRQDOLW\EH\RQGWKHEDVLFILOH,2VHUYLFHVVRWKHVHW\SHVILWLQWR
ERWKWKHILUVWDQGVHFRQGFDWHJRULHV/LNHZLVHIUDPHZRUNVXVXDOO\QHHGWRLQWHJUDWH
ZLWKXQGHUO\LQJVHUYLFHVWRVRPHH[WHQWIRUH[DPSOHDOWKRXJKWKH:LQGRZV)RUPV
8,IUDPHZRUNKDVDGLVWLQFWLYH$3,RILWVRZQDORWRIWKHXQGHUO\LQJIXQFWLRQDOLW\LV
SURYLGHGE\:LQFRPSRQHQWV6RWKHWKUHHFDWHJRULHVKHUHDUHQRWVWULFW7KH\MXVW
RIIHUDXVHIXOLGHDRIZKDWVRUWVRIWKLQJV\RXFDQILQGLQWKHFODVVOLEUDULHV

Language Style
&LVQRWWKHRQO\ODQJXDJHWKDWUXQVRQWKH1(7)UDPHZRUN,QGHHGVXSSRUWIRU
PXOWLSOHODQJXDJHVKDVDOZD\VEHHQDNH\IHDWXUHRI1(7UHIOHFWHGLQWKHQDPHRILWV
UXQWLPHHQJLQHWKH&/5RU&RPPRQ/DQJXDJH5XQWLPH$VWKLVQDPHLPSOLHV1(7
LV QRW MXVW IRU RQH ODQJXDJHQXPHURXV ODQJXDJHV KDYH DFFHVV WR WKH VHUYLFHV RI
WKH1(7)UDPHZRUNFODVVOLEUDU\:K\PLJKW\RXFKRRVH&RYHUWKHRWKHUV"
:HDOUHDG\PHQWLRQHGRQHLPSRUWDQWUHDVRQ&ZDVGHVLJQHGVSHFLILFDOO\IRU1(7
,I\RXDUHZRUNLQJZLWK1(7WHFKQRORJLHVVXFKDV:3)RU$631(7\RXOOEHVSHDNLQJ
WKHLU ODQJXDJH LI \RX ZRUN LQ & &RPSDUH WKLV ZLWK & ZKLFK VXSSRUWV 1(7
WKURXJKH[WHQVLRQVWRWKHRULJLQDOODQJXDJH7KHH[WHQVLRQVDUHFDUHIXOO\WKRXJKWRXW
DQG ZRUN ZHOO EXW FRGH WKDW XVHV 1(7 OLEUDULHV MXVW ORRNV GLIIHUHQW IURP QRUPDO
&VRSURJUDPVWKDWEULGJHWKHZRUOGVRI1(7DQGVWDQGDUG&QHYHUIHHOFRP
SOHWHO\FRKHUHQW$QGWKHGXDOSHUVRQDOLW\RIWHQSUHVHQWVGLOHPPDVVKRXOG\RXXVH
VWDQGDUG&FROOHFWLRQFODVVHVRUWKHRQHVLQWKH1(7FODVVOLEUDU\IRUH[DPSOH",Q
QDWLYH1(7ODQJXDJHVVXFKDV&VXFKTXHVWLRQVGRQRWHPHUJH
%XW&LVQRWXQLTXHLQWKLVUHVSHFW9LVXDO6WXGLRVKLSVZLWKWKUHHODQJXDJHV
GHVLJQHG IRU 1(7 & 9%1(7 DQG ) $OWKRXJK 9%1(7 IROORZV RQ IURP LWV
QRQ1(79LVXDO%DVLFSUHGHFHVVRUVLWZDVUDGLFDOO\GLIIHUHQWLQVRPHLPSRUWDQWZD\V
,WLVDQDWLYH1(7ODQJXDJHZLWKD9%OLNHV\QWD[UDWKHUWKDQ9%ZLWK1(7FDSD
ELOLWLHVEROWHGRQ 7KHFKRLFHEHWZHHQWKHVHODQJXDJHVFRPHVGRZQWRZKDWVW\OHRI
ODQJXDJH\RXSUHIHU

Language Style | 3

)LVWKHRGGRQHRXWKHUH,WVDIXQFWLRQDOSURJUDPPLQJODQJXDJHKHDYLO\LQIOXHQFHG
E\DODQJXDJHFDOOHG0/%DFNLQZKHQ\RXUDXWKRUVZHUHILUVW\HDUVWXGHQWVRXU
XQLYHUVLW\V FRPSXWHU VFLHQFH FRXUVH FKRVH 0/ IRU WKH ILUVW SURJUDPPLQJ ODQJXDJH
OHFWXUHVLQSDUWEHFDXVHLWZDVVRDFDGHPLFWKDWQRQHRIWKHVWXGHQWVZRXOGSUHYLRXVO\
KDYHFRPHDFURVVDQ\WKLQJOLNHLW)LVVWLOODWWKHDFDGHPLFHQGRIWKHVSHFWUXPGHVSLWH
KDYLQJFOLPEHGIDUHQRXJKGRZQWKHLYRU\WRZHUWREHDVWDQGDUGSDUWRIDPDLQVWUHDP
GHYHORSPHQWHQYLURQPHQW,WH[FHOVDWFRPSOLFDWHGFDOFXODWLRQVDQGDOJRULWKPVDQG
KDVVRPHFKDUDFWHULVWLFVWKDWFDQKHOSZLWKSDUDOOHOH[HFXWLRQ+RZHYHUDVZLWKPDQ\
IXQFWLRQDOODQJXDJHVWKHFRVWRIPDNLQJVRPHKDUGSUREOHPVHDVLHULVWKDWDORWRI
WKLQJV WKDW DUH HDV\ LQ PRUH WUDGLWLRQDO ODQJXDJHV DUH UHPDUNDEO\ KDUG LQ )
IXQFWLRQDOODQJXDJHVDUHDGHSWDWFRPSOH[SUREOHPVEXWFDQEHFOXPV\ZLWKVLPSOH
RQHV,WVHHPVOLNHO\WKDW)ZLOOPRVWO\EHXVHGLQVFLHQWLILFRUILQDQFLDODSSOLFDWLRQV
ZKHUHWKHFRPSOH[LW\RIWKHFRPSXWDWLRQWREHSHUIRUPHGGZDUIVWKHFRPSOH[LW\RI
WKHFRGHWKDWQHHGVWRDFWRQWKHUHVXOWVRIWKRVHFDOFXODWLRQV
:KLOH)IHHOVGLVWLQFWO\RWKHU9%1(7DQG&KDYHDORWRIVLPLODULWLHV7KHPRVW
REYLRXVIDFWRULQFKRRVLQJEHWZHHQWKHVHLVWKDW9%1(7LVHDVLHUWROHDUQIRUVRPHRQH
IDPLOLDUZLWK9LVXDO%DVLFV\QWD[ZKLOH&ZLOOEHHDVLHUIRUVRPHRQHIDPLOLDUZLWKD
&OLNHODQJXDJH+RZHYHUWKHUHLVDVXEWOHUGLIIHUHQFHLQODQJXDJHSKLORVRSK\WKDWJRHV
EH\RQGWKHV\QWD[

Composability
$FRQVLVWHQWWKHPHLQWKHGHVLJQRIWKH&SURJUDPPLQJODQJXDJHLVWKDWLWVFUHDWRUV
WHQGWRSUHIHUJHQHUDOSXUSRVHIHDWXUHVRYHUVSHFLDOL]HGRQHV7KHPRVWREYLRXVH[
DPSOHRIWKLVLV/,14WKH/DQJXDJH,1WHJUDWHG4XHU\IHDWXUHDGGHGLQ&6X
SHUILFLDOO\WKLVDSSHDUVWRDGG64/OLNHTXHU\IHDWXUHVWRWKHODQJXDJHSURYLGLQJD
QDWXUDOZD\WRLQWHJUDWHGDWDEDVHDFFHVVLQWR\RXUFRGH([DPSOHVKRZVDVLPSOH
TXHU\
([DPSOH'DWDDFFHVVZLWK/,14
var californianAuthors = from author in pubs.authors
where author.state == "CA"
select new
{
author.au_fname,
author.au_lname
};
foreach (var author in californianAuthors)
{
Console.WriteLine(author);
}

'HVSLWHDSSHDUDQFHV&GRHVQWNQRZDQ\WKLQJDERXW64/RUGDWDEDVHV7RHQDEOH
WKLVV\QWD[&DGGHGDUDIWRIODQJXDJHIHDWXUHVZKLFKLQFRPELQDWLRQDOORZFRGH
RIWKLVVRUWWREHXVHGQRWMXVWIRUGDWDEDVHDFFHVVEXWDOVRIRU;0/SDUVLQJRUZRUNLQJ

4 | Chapter 1:Introducing C#

ZLWKREMHFWPRGHOV0RUHRYHUPDQ\RIWKHLQGLYLGXDOIHDWXUHVFDQEHXVHGLQRWKHU
FRQWH[WVDVZHOOVHHLQODWHUFKDSWHUV&SUHIHUVVPDOOFRPSRVDEOHJHQHUDOSXUSRVH
IHDWXUHVRYHUPRQROLWKLFVSHFLDOL]HGRQHV
$VWULNLQJH[DPSOHRIWKLVSKLORVRSK\LVDIHDWXUHWKDWZDVGHPRQVWUDWHGLQSURWRW\SH
IRUPLQ&EXWZKLFKHYHQWXDOO\JRWOHIWRXW;0/OLWHUDOV7KLVH[SHULPHQWDOV\QWD[
DOORZHGLQOLQH;0/ZKLFKFRPSLOHGLQWRFRGHWKDWEXLOWDQREMHFWPRGHOUHSUHVHQWLQJ
WKDW;0/7KH&WHDPVGHFLVLRQWRRPLWWKLVIHDWXUHLOOXVWUDWHVDVW\OLVWLFSUHIHUHQFH
IRUJHQHUDOLW\RYHUKLJKO\VSHFLDOL]HGIHDWXUHVZKLOHWKH/,14V\QWD[KDVPDQ\DS
SOLFDWLRQV;0/OLWHUDOV\QWD[FDQQRWEHXVHGIRUDQ\WKLQJRWKHUWKDQ;0/DQGWKLV
GHJUHHRIVSHFLDOL]DWLRQZRXOGIHHORXWRISODFHLQ&

Managed Code
7KH1(7)UDPHZRUNSURYLGHVPRUHWKDQMXVWDFODVVOLEUDU\,WDOVRSURYLGHVVHUYLFHV
LQVXEWOHUZD\VWKDWDUHQRWDFFHVVHGH[SOLFLWO\WKURXJKOLEUDU\FDOOV)RUH[DPSOHHDUOLHU
ZHPHQWLRQHGWKDW&FDQDXWRPDWHVRPHDVSHFWVRIPHPRU\PDQDJHPHQWDQRWRUL
RXVVRXUFHRIEXJVLQ&FRGH$EDQGRQLQJKHDSDOORFDWHGREMHFWVRQFH\RXUHGRQH
ZLWKWKHPLVDFRGLQJHUURULQ&EXWLWVWKHQRUPDOZD\WRIUHHWKHPLQ1(77KLV
VHUYLFH LV SURYLGHG E\ WKH &/5WKH 1(7 )UDPHZRUNV UXQWLPH HQYLURQPHQW $O
WKRXJKWKH&FRPSLOHUZRUNVFORVHO\ZLWKWKHUXQWLPHWRPDNHWKLVSRVVLEOHSURYLG
LQJWKHQHFHVVDU\LQIRUPDWLRQDERXWKRZ\RXUFRGHXVHVREMHFWVDQGGDWDLWVXOWLPDWHO\
WKHUXQWLPHWKDWGRHVWKHZRUNRIJDUEDJHFROOHFWLRQ
'HSHQGLQJRQZKDWVRUWVRIODQJXDJHV\RXPD\KDYHZRUNHGZLWKEHIRUHWKHLGHDWKDW
WKHODQJXDJHGHSHQGVKHDYLO\RQWKHUXQWLPHPLJKWVHHPHLWKHUFRPSOHWHO\QDWXUDORU
VRPHZKDW GLVFRQFHUWLQJ ,WV FHUWDLQO\ GLIIHUHQW IURP KRZ & DQG & ZRUNZLWK
WKRVHODQJXDJHVWKHFRPSLOHUVRXWSXWFDQEHH[HFXWHGGLUHFWO\E\WKHFRPSXWHUDQG
DOWKRXJKWKRVHODQJXDJHVKDYHVRPHUXQWLPHVHUYLFHVLWVSRVVLEOHWRZULWHFRGHWKDW
FDQUXQZLWKRXWWKHP%XW&FRGHFDQQRWHYHQH[HFXWHZLWKRXWWKHKHOSRIWKHUXQ
WLPH&RGHWKDWGHSHQGVHQWLUHO\RQWKHUXQWLPHLVFDOOHGPDQDJHGFRGH
0DQDJHGFRPSLOHUVGRQRWSURGXFHUDZH[HFXWDEOHFRGH,QVWHDGWKH\SURGXFHDQ
LQWHUPHGLDWHIRUPRIFRGHFDOOHG,/WKH,QWHUPHGLDWH/DQJXDJH7KHUXQWLPHGHFLGHV
H[DFWO\KRZWRFRQYHUWLWLQWRVRPHWKLQJH[HFXWDEOH2QHSUDFWLFDOXSVKRWRIPDQDJHG
FRGHLVWKDWDFRPSLOHG&SURJUDPFDQUXQRQERWKELWDQGELWV\VWHPVZLWKRXW
PRGLILFDWLRQDQGFDQHYHQUXQRQGLIIHUHQWSURFHVVRUDUFKLWHFWXUHVLWVRIWHQSRVVLEOH

9%1(7VXSSRUWV;0/OLWHUDOV6LQFH&VKLSSHGWKH&DQG9%1(7WHDPVKDYHRSHUDWHGDSROLF\RI
NHHSLQJWKHIHDWXUHVHWVRIWKHWZRODQJXDJHVVLPLODUVRWKHIDFWWKDW9%1(7SLFNHGXSDIHDWXUHWKDW&
DEDQGRQHGVKRZVDFOHDUGLIIHUHQFHLQODQJXDJHSKLORVRSK\
'HSHQGLQJ RQ ZKHWKHU \RX UHDG 0LFURVRIWV GRFXPHQWDWLRQ RU WKH (&0$ &/, &RPPRQ /DQJXDJH
,QIUDVWUXFWXUH VSHFLILFDWLRQVWKDWGHILQHWKHVWDQGDUGL]HGSDUWVRI1(7DQG&,/VSURSHUQDPHLVHLWKHU
06,/ 0LFURVRIW,/ RU&,/ &RPPRQ,/ UHVSHFWLYHO\7KHXQRIILFLDOQDPH,/VHHPVPRUHSRSXODULQ
SUDFWLFH

Language Style | 5

IRUFRGHWKDWUXQVRQDQ$50EDVHGKDQGKHOGGHYLFHWRUXQXQPRGLILHGRQ,QWHOEDVHG
3&VRURQWKH3RZHU3&DUFKLWHFWXUHIRXQGLQWKH;ER[JDPHFRQVROH
$VLQWHUHVWLQJDV&38LQGHSHQGHQFHPD\EHLQSUDFWLFHWKHPRVWXVHIXODVSHFWRIPDQ
DJHGFRGHDQG,/LVWKDWWKH1(7UXQWLPHFDQSURYLGHXVHIXOVHUYLFHVWKDWDUHYHU\KDUG
IRUWUDGLWLRQDOFRPSLODWLRQV\VWHPVWRLPSOHPHQWZHOO,QRWKHUZRUGVWKHSRLQWLVWR
PDNHGHYHORSHUVPRUHSURGXFWLYH7KHPHPRU\PDQDJHPHQWPHQWLRQHGHDUOLHULVMXVW
RQHH[DPSOH2WKHUVLQFOXGHDVHFXULW\PRGHOWKDWWDNHVWKHRULJLQRIFRGHLQWRDFFRXQW
UDWKHUWKDQPHUHO\WKHLGHQWLW\RIWKHXVHUZKRKDSSHQVWREHUXQQLQJWKHFRGHIOH[LEOH
PHFKDQLVPVIRUORDGLQJVKDUHGFRPSRQHQWVZLWKUREXVWVXSSRUWIRUVHUYLFLQJDQGYHU
VLRQLQJUXQWLPHFRGHRSWLPL]DWLRQEDVHGRQKRZWKHFRGHLVEHLQJXVHGLQSUDFWLFH
UDWKHUWKDQKRZWKHFRPSLOHUJXHVVHVLWPLJKWEHXVHGDQGDVDOUHDG\PHQWLRQHGWKH
&/5VDELOLW\WRYHULI\WKDWFRGHFRQIRUPVWRW\SHVDIHW\UXOHVEHIRUHH[HFXWLQJLWUXOLQJ
RXWZKROHFODVVHVRIVHFXULW\DQGVWDELOLW\EXJV
,I\RXUHD-DYDGHYHORSHUDOORIWKLVZLOOVRXQGUDWKHUIDPLOLDUMXVWVXEVWLWXWHE\WH
FRGHIRU,/DQGWKHVWRU\LVYHU\VLPLODU,QGHHGDSRSXODUEXWVRPHZKDWLJQRUDQWMRNH
DPRQJWKHOHVVWKRXJKWIXOPHPEHUVRIWKH-DYDFRPPXQLW\LVWRGHVFULEH&DVDSRRU
LPLWDWLRQRI-DYD:KHQWKHILUVWYHUVLRQRI&DSSHDUHGWKHGLIIHUHQFHVZHUHVXEWOH
EXWWKHIDFWWKDW-DYDZHQWRQWRFRS\VHYHUDOIHDWXUHVIURP&LOOXVWUDWHVWKDW&ZDV
DOZD\VPRUHWKDQDPHUHFORQH7KHODQJXDJHVKDYHJURZQPRUHREYLRXVO\GLIIHUHQW
ZLWKHDFKQHZYHUVLRQEXWRQHGLIIHUHQFHSUHVHQWIURPWKHVWDUWLVSDUWLFXODUO\LP
SRUWDQWIRU:LQGRZVGHYHORSHUV&KDVDOZD\VPDGHLWHDV\WRJHWDWWKHIHDWXUHVRI
WKHXQGHUO\LQJ:LQGRZVSODWIRUP

Continuity and the Windows Ecosystem


6RIWZDUHGHYHORSPHQWSODWIRUPVGRQRWVXFFHHGSXUHO\RQWKHLURZQPHULWVFRQWH[W
PDWWHUV)RUH[DPSOHZLGHVSUHDGDYDLODELOLW\RIWKLUGSDUW\FRPSRQHQWVDQGWRROVFDQ
PDNHDSODWIRUPVLJQLILFDQWO\PRUHFRPSHOOLQJ:LQGRZVLVSHUKDSVWKHPRVWVWULNLQJ
H[DPSOHRIWKLVSKHQRPHQRQ$Q\QHZSURJUDPPLQJV\VWHPDWWHPSWLQJWRJDLQDF
FHSWDQFHKDVDFRQVLGHUDEOHDGYDQWDJHLILWFDQSOXJLQWRVRPHH[LVWLQJHFRV\VWHPDQG
RQHRIWKHELJJHVWGLIIHUHQFHVEHWZHHQ&DQG-DYDLVWKDW&DQGWKH1(7)UDPHZRUN
SRVLWLYHO\HPEUDFHWKH:LQGRZVSODWIRUPZKLOH-DYDJRHVRXWRILWVZD\WRLQVXODWH
GHYHORSHUVIURPWKHXQGHUO\LQJ26
,I\RXUHZULWLQJFRGHWRUXQRQDVSHFLILFRSHUDWLQJV\VWHPLWVQRWHVSHFLDOO\KHOSIXO
IRUDODQJXDJHWRFXW\RXRIIIURPWKHWRROVDQGFRPSRQHQWVXQLTXHWR\RXUFKRVHQ
SODWIRUP5DWKHUWKDQUHTXLULQJGHYHORSHUVWREUHDNZLWKWKHSDVW1(7RIIHUVFRQ
WLQXLW\E\PDNLQJLWSRVVLEOHWRZRUNGLUHFWO\ZLWKFRPSRQHQWVDQGVHUYLFHVHLWKHUEXLOW
LQWRRUEXLOWIRU:LQGRZV0RVWRIWKHWLPH\RXZRQWQHHGWRXVHWKLVWKHFODVV
OLEUDU\SURYLGHVZUDSSHUVIRUDORWRIWKHXQGHUO\LQJSODWIRUPVIXQFWLRQDOLW\+RZHYHU
LI\RXQHHGWRXVHDWKLUGSDUW\FRPSRQHQWRUDIHDWXUHRIWKHRSHUDWLQJV\VWHPWKDW
GRHVQW\HWKDYHD1(7ZUDSSHUWKHDELOLW\WRZRUNZLWKVXFKXQPDQDJHGIHDWXUHV
GLUHFWO\IURPPDQDJHGFRGHLVLQYDOXDEOH

6 | Chapter 1:Introducing C#

:KLOH1(7RIIHUVIHDWXUHVWRHDVHLQWHJUDWLRQZLWKWKHXQGHUO\LQJSODW
IRUPWKHUHLVVWLOOVXSSRUWIRUQRQ:LQGRZVV\VWHPV0LFURVRIWV6LO
YHUOLJKWFDQUXQ&DQG9%1(7FRGHRQ0DF26;DVZHOODV:LQGRZV
7KHUHVDQRSHQVRXUFHSURMHFWFDOOHG0RQRZKLFKHQDEOHV1(7FRGH
WRUXQRQ/LQX[DQGWKHUHODWHG0RRQOLJKWSURMHFWLVDQRSHQVRXUFH
YHUVLRQRI6LOYHUOLJKW6RWKHSUHVHQFHRIORFDOSODWIRUPLQWHJUDWLRQIHD
WXUHVGRHVQWVWRS&IURPEHLQJXVHIXORQPXOWLSOHSODWIRUPVLI\RX
ZDQWWRWDUJHWPXOWLSOHRSHUDWLQJV\VWHPV\RXZRXOGMXVWFKRRVHQRW
WRXVHDQ\SODWIRUPVSHFLILFIHDWXUHV
6RWKHELJJHVWSKLORVRSKLFDOGLIIHUHQFHEHWZHHQ&DQG-DYDLVWKDW&
SURYLGHV HTXDO VXSSRUW IRU GLUHFW XVH RI RSHUDWLQJV\VWHPVSHFLILF
IHDWXUHVDQGIRUSODWIRUPLQGHSHQGHQFH-DYDPDNHVWKHIRUPHUGLVSUR
SRUWLRQDWHO\KDUGHUWKDQWKHODWWHU

7KHODWHVWYHUVLRQRI&FRQWDLQVIHDWXUHVWKDWHQKDQFHWKLVFDSDELOLW\IXUWKHU6HYHUDO
RIWKHQHZ&IHDWXUHVPDNHLWHDVLHUWRLQWHUDFWZLWK2IILFHDQGRWKHU:LQGRZV
DSSOLFDWLRQVWKDWXVH&20DXWRPDWLRQWKLVZDVDZHDNVSRWLQ&7KHUHODWLYH
HDVHZLWKZKLFKGHYHORSHUVFDQUHDFKRXWVLGHWKHERXQGDULHVRIPDQDJHGFRGHPDNHV
&DQDWWUDFWLYHFKRLFHLWRIIHUVDOOWKHEHQHILWVRIPDQDJHGH[HFXWLRQEXWUHWDLQVWKH
DELOLW\WRZRUNZLWKDQ\FRGHLQWKH:LQGRZVHQYLURQPHQWPDQDJHGRUQRW

C# 4.0, .NET 4, and Visual Studio 2010


6LQFH&IDYRUVJHQHUDOSXUSRVHODQJXDJHIHDWXUHVGHVLJQHGWREHFRPSRVHGZLWKRQH
DQRWKHULWRIWHQGRHVQWPDNHVHQVHWRGHVFULEHLQGLYLGXDOQHZIHDWXUHVRQWKHLURZQ
6RUDWKHUWKDQGHYRWLQJVHFWLRQVRUZKROHFKDSWHUVWRQHZIHDWXUHVZHFRYHUWKHPLQ
FRQWH[W LQWHJUDWHG DSSURSULDWHO\ ZLWK RWKHU ROGHU ODQJXDJH IHDWXUHV 7KH VHFWLRQ
\RXUHUHDGLQJULJKWQRZLVDQH[FHSWLRQRIFRXUVHDQGWKHPDLQUHDVRQLVWKDWZH
H[SHFWSHRSOHDOUHDG\IDPLOLDUZLWK&WREURZVHWKURXJKWKLVERRNLQERRNVWRUHV
ORRNLQJIRURXUFRYHUDJHRIWKHQHZIHDWXUHV,IWKDWV\RXZHOFRPHWRWKHERRN,I\RX
ORRNLQWKH3UHIDFH\RXOOILQGDJXLGHWRZKDWVZKHUHLQWKHERRNLQFOXGLQJDVHFWLRQ
MXVWIRU\RXGHVFULELQJZKHUHWRILQGPDWHULDODERXW&IHDWXUHV
7KDWEHLQJVDLGDWKHPHXQLWHVWKHQHZODQJXDJHIHDWXUHVLQYHUVLRQWKH\VXSSRUW
G\QDPLFSURJUDPPLQJZLWKDSDUWLFXODUIRFXVRQPDNLQJFHUWDLQLQWHURSHUDELOLW\VFH
QDULRVVLPSOHU)RUH[DPSOHFRQVLGHUWKH&FRGHLQ([DPSOHWKDWXVHVSDUW
RIWKH2IILFHREMHFWPRGHOWRUHDGWKHAuthorSURSHUW\IURPD:RUGGRFXPHQW
([DPSOH7KHKRUURUVRI2IILFHLQWHURSEHIRUH&
static void Main(string[] args)
{
var wordApp = new Microsoft.Office.Interop.Word.Application();
object fileName = @"WordFile.docx";
object missing = System.Reflection.Missing.Value;

C# 4.0, .NET 4, and Visual Studio 2010 | 7

object readOnly = true;


Microsoft.Office.Interop.Word._Document doc =
wordApp.Documents.Open(ref fileName, ref missing, ref readOnly,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);
object docProperties = doc.BuiltInDocumentProperties;
Type docPropType = docProperties.GetType();
object authorProp = docPropType.InvokeMember("Item",
BindingFlags.Default | BindingFlags.GetProperty,
null, docProperties,
new object[] { "Author" });
Type propType = authorProp.GetType();
string authorName = propType.InvokeMember("Value",
BindingFlags.Default |BindingFlags.GetProperty,
null, authorProp,
new object[] { }).ToString();
object saveChanges = false;
doc.Close(ref saveChanges, ref missing, ref missing);

Console.WriteLine(authorName);
}

7KDWVVRPHSUHWW\KRUULEOHFRGHLWVKDUGWRVHHZKDWWKHH[DPSOHGRHVEHFDXVHWKH
JRDOLVORVWLQWKHGHWDLOV7KHUHDVRQLWLVVRXQSOHDVDQWLVWKDW2IILFHVSURJUDPPLQJ
PRGHOLVGHVLJQHGIRUG\QDPLFODQJXDJHVWKDWFDQILOOLQDORWRIWKHGHWDLOVDWUXQWLPH
&ZDVQWDEOHWRGRWKLVVRGHYHORSHUVZHUHIRUFHGWRGRDOOWKHZRUNE\KDQG
([DPSOHVKRZVKRZWRGRH[DFWO\WKHVDPHMRELQ&7KLVLVDORWHDVLHUWR
IROORZEHFDXVHWKHFRGHFRQWDLQVRQO\WKHUHOHYDQWGHWDLOV,WVHDV\WRVHHWKHVHTXHQFH
RIRSHUDWLRQVRSHQWKHGRFXPHQWJHWLWVSURSHUWLHVUHWULHYHWKH AuthorSURSHUW\V
YDOXHDQGFORVHWKHGRFXPHQW&LVQRZDEOHWRILOOLQDOOWKHGHWDLOVIRUXVWKDQNV
WRLWVQHZG\QDPLFODQJXDJHIHDWXUHV
([DPSOH2IILFHLQWHURSZLWK&
static void Main(string[] args)
{
var wordApp = new Microsoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word._Document doc =
wordApp.Documents.Open("WordFile.docx", ReadOnly: true);
dynamic docProperties = doc.BuiltInDocumentProperties;
string authorName = docProperties["Author"].Value;
doc.Close(SaveChanges: false);
Console.WriteLine(authorName);
}

8 | Chapter 1:Introducing C#

7KLVH[DPSOHXVHVDFRXSOHRI&IHDWXUHVLWXVHVWKHQHZ dynamicNH\ZRUGIRU
UXQWLPH ELQGLQJ WR PHPEHUV ,W DOVR XVHV WKH VXSSRUW IRU RSWLRQDO DUJXPHQWV 7KH
OpenDQGClosePHWKRGVWDNHDQGDUJXPHQWVUHVSHFWLYHO\DQGDV\RXFDQVHHIURP
([DPSOH\RXQHHGWRSURYLGHDOORIWKHPLQ&%XW([DPSOHKDVRQO\
SURYLGHGYDOXHVIRUWKHDUJXPHQWVLWZDQWVWRVHWWRVRPHWKLQJRWKHUWKDQWKHGHIDXOW
%HVLGHVXVLQJWKHVHWZRQHZIHDWXUHVDSURMHFWFRQWDLQLQJWKLVFRGHZRXOGXVXDOO\EH
EXLOW XVLQJ D WKLUG QHZ LQWHURS IHDWXUH FDOOHG QR3,$ 7KHUHV QRWKLQJ WR VHH LQ WKH
SUHFHGLQJH[DPSOHEHFDXVHZKHQ\RXHQDEOHQR3,$LQD&SURMHFW\RXGRQRWQHHG
WRPRGLI\\RXUFRGHQR3,$LVHVVHQWLDOO\DGHSOR\PHQWIHDWXUH,Q&\RXKDG
WRLQVWDOOVSHFLDOVXSSRUWOLEUDULHVFDOOHGSULPDU\LQWHURSDVVHPEOLHV 3,$V RQWKHWDUJHW
PDFKLQHWREHDEOHWRXVH&20$3,VVXFKDV2IILFHDXWRPDWLRQEXWLQ&\RXQR
ORQJHUKDYHWRGRWKLV<RXVWLOOQHHGWKHVH3,$VRQ\RXUGHYHORSPHQWPDFKLQHEXWWKH
&FRPSLOHUFDQH[WUDFWWKHLQIRUPDWLRQ\RXUFRGHUHTXLUHVDQGFRS\LWLQWR\RXU
DSSOLFDWLRQ7KLVVDYHV\RXIURPGHSOR\LQJ3,$VWRWKHWDUJHWPDFKLQHKHQFHWKHQDPH
QR3,$
:KLOHWKHVHQHZODQJXDJHIHDWXUHVDUHSDUWLFXODUO\ZHOOVXLWHGWR&20DXWRPDWLRQ
LQWHURSVFHQDULRVWKH\FDQEHXVHGDQ\ZKHUH 7KHQR3,$IHDWXUHLVQDUURZHUEXW
LWVUHDOO\SDUWRIWKH1(7UXQWLPHUDWKHUWKDQD&ODQJXDJHIHDWXUH

Summary
,QWKLVFKDSWHUZHSURYLGHGDTXLFNRYHUYLHZRIWKHQDWXUHRIWKH&ODQJXDJHDQGZH
VKRZHGVRPHRILWVVWUHQJWKVDQGKRZWKHODWHVWYHUVLRQKDVHYROYHG7KHUHVRQHODVW
EHQHILW\RXVKRXOGEHDZDUHRIEHIRUHZHJHWLQWRWKHGHWDLOVLQWKHQH[WFKDSWHUDQG
WKDWVWKHVKHHUTXDQWLW\RI&UHVRXUFHVDYDLODEOHRQWKH,QWHUQHW:KHQWKH1(7
)UDPHZRUN ILUVW DSSHDUHG & DGRSWLRQ WRRN RII PXFK IDVWHU WKDQ WKH RWKHU 1(7
ODQJXDJHV&RQVHTXHQWO\LI\RXUHVHDUFKLQJIRUH[DPSOHVRIKRZWRJHWWKLQJVGRQH
RUVROXWLRQVWRSUREOHPV&LVDQH[FHOOHQWFKRLFHEHFDXVHLWVVRZHOOUHSUHVHQWHGLQ
EORJVH[DPSOHVWRROVRSHQVRXUFHSURMHFWVDQGZHEFDVWV0LFURVRIWVRZQGRFX
PHQWDWLRQLVSUHWW\HYHQKDQGHGEHWZHHQ&DQG9%1(7EXWRQWKH:HEDVDZKROH
\RXUHIDUEHWWHUVHUYHGLI\RXUHD&GHYHORSHU6RZLWKWKDWLQPLQGZHOOQRZORRN
DWWKHIXQGDPHQWDOHOHPHQWVRI&SURJUDPV

Summary | 9

CHAPTER 2

Basic Programming Techniques

7RXVHDSURJUDPPLQJODQJXDJH\RXPXVWPDVWHUWKHIXQGDPHQWDOV<RXQHHGWRXQ
GHUVWDQGWKHHOHPHQWVUHTXLUHGWRFRQVWUXFWDZRUNLQJSURJUDPDQGOHDUQKRZWRXVH
WKHGHYHORSPHQWWRROVWREXLOGDQGUXQFRGH<RXDOVRQHHGWREHFRPHIDPLOLDUZLWK
WKHHYHU\GD\IHDWXUHVIRUUHSUHVHQWLQJLQIRUPDWLRQSHUIRUPLQJFDOFXODWLRQVDQGPDN
LQJGHFLVLRQV7KLVFKDSWHUZLOOLQWURGXFHWKHVHFRUHIHDWXUHVRIWKH&ODQJXDJH

Getting Started
:HOOEHZRUNLQJLQ9LVXDO6WXGLRWKH0LFURVRIWGHYHORSPHQWHQYLURQPHQW7KHUHDUH
RWKHUZD\VWREXLOG&SURJUDPVEXW9LVXDO6WXGLRLVWKHPRVWZLGHO\XVHGDQGLWV
IUHHO\DYDLODEOHVRZHOOVWLFNZLWKWKDW
,I \RX GRQW KDYH 9LVXDO 6WXGLR \RX FDQ GRZQORDG WKH IUHH ([SUHVV
HGLWLRQIURPKWWSZZZPLFURVRIWFRPH[SUHVV

,QWKHILUVWSDUWRIWKLVFKDSWHUZHOOFUHDWHDYHU\VLPSOHSURJUDPVRWKDW\RXFDQVHH
WKHEDUHPLQLPXPRIVWHSVUHTXLUHGWRJHWXSDQGUXQQLQJ:HOODOVRH[DPLQHDOORI
WKHSLHFHV9LVXDO6WXGLRFUHDWHVIRU\RXVRWKDW\RXNQRZH[DFWO\ZKDWWKHGHYHORSPHQW
HQYLURQPHQWLVGRLQJIRU\RX$QGWKHQZHOOEXLOGVRPHVOLJKWO\PRUHLQWHUHVWLQJH[
DPSOHVWRH[SORUHWKH&ODQJXDJH
7RFUHDWHDQHZ&SURJUDPVHOHFWWKH)LOH1HZ3URMHFWPHQXRSWLRQRUMXVWXVHWKH
&WUO6KLIW1 VKRUWFXW 7KLV ZLOO RSHQ 9LVXDO 6WXGLRV 1HZ 3URMHFW GLDORJ VKRZQ LQ
)LJXUHZKHUH\RXFDQSLFNWKHNLQGRISURJUDP\RXZDQWWREXLOG,QWKH,QVWDOOHG
7HPSODWHVOLVWRQWKHOHIWKDQGVLGHHQVXUHWKDWWKH9LVXDO&LWHPLVH[SDQGHGDQG
LQVLGHWKDWVHOHFWWKH:LQGRZVLWHPDSSOLFDWLRQVWKDWUXQORFDOO\RQ:LQGRZVDUH
WKHHDVLHVWWRFUHDWH:HOOJHWLQWRRWKHUNLQGVRISURJUDPVVXFKDVZHEDSSOLFDWLRQV
ODWHULQWKHERRN

11

)LJXUH9LVXDO6WXGLRV1HZ3URMHFWGLDORJ

,QWKHGLDORJVFHQWHUVHOHFWWKH&RQVROH$SSOLFDWLRQWHPSODWH7KLVFUHDWHVDQROG
IDVKLRQHGFRPPDQGOLQHDSSOLFDWLRQWKDWUXQVLQDFRQVROHZLQGRZ,WPLJKWQRWEH
WKHPRVWH[FLWLQJNLQGRISURJUDPEXWLWVWKHHDVLHVWWRFUHDWHDQGXQGHUVWDQGVR
WKDWVZKHUHZHOOVWDUW
<RX QHHG WR SLFN D QDPH IRU \RXU SURJUDPE\ GHIDXOW 9LVXDO 6WXGLR ZLOO VXJJHVW
VRPHWKLQJXQLPDJLQDWLYHVXFKDVConsoleApplication1,QWKH1DPHILHOGQHDUWKHERW
WRPRIWKHGLDORJW\SH HelloWorld 2.VRWKDWVHTXDOO\XQLPDJLQDWLYHEXWDWOHDVW
LWVGHVFULSWLYH 9LVXDO6WXGLRDOVRZDQWVWRNQRZZKHUH\RXGOLNHWRSXWWKHSURMHFW
RQ\RXUKDUGGLVNSXWLWZKHUHYHU\RXOLNH,WFDQDOVRFUHDWHDVHSDUDWHVROXWLRQ
GLUHFWRU\7KDWVVRPHWKLQJ\RXGGRLQDODUJHUSURJUDPPDGHXSRIPXOWLSOHFRP
SRQHQWV EXW IRU WKLV VLPSOH H[DPSOH \RX ZDQW WKH &UHDWH GLUHFWRU\ IRU VROXWLRQ
FKHFNER[WREHXQFKHFNHG
:KHQ\RXFOLFNWKH2.EXWWRQ9LVXDO6WXGLRZLOOFUHDWHDQHZSURMHFWDFROOHFWLRQRI
ILOHVWKDWDUHXVHGWREXLOGDSURJUDP&SURMHFWVDOZD\VFRQWDLQVRXUFHFRGHILOHVEXW
WKH\RIWHQLQFOXGHRWKHUW\SHVRIILOHVVXFKDVELWPDSV7KLVQHZO\FUHDWHGSURMHFWZLOO
FRQWDLQD&VRXUFHILOHFDOOHG3URJUDPFVZKLFKVKRXOGEHYLVLEOHLQ9LVXDO6WXGLRV
WH[WHGLWRU,QFDVH\RXUHQRWIROORZLQJDORQJLQ9LVXDO6WXGLRDV\RXUHDGWKLVWKH
FRGHLVUHSURGXFHGLQ([DPSOH%\WKHZD\WKHUHVQRSDUWLFXODUVLJQLILFDQFHWRWKH
ILOHQDPH 3URJUDPFV 9LVXDO 6WXGLR GRHVQW FDUH ZKDW \RX FDOO \RXU VRXUFH ILOHV E\
FRQYHQWLRQWKH\KDYHDFVH[WHQVLRQVKRUWIRU&DOWKRXJKHYHQWKDWVRSWLRQDO
12 | Chapter 2:Basic Programming Techniques

([DPSOH7KHFRGHLQDIUHVKO\FUHDWHGFRQVROHDSSOLFDWLRQ
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;

namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
}
}
}

7KLVSURJUDPGRHVQWGRDQ\WKLQJ\HW7RWXUQLWLQWRWKHWUDGLWLRQDOILUVWH[DPSOH
\RXOOQHHGWRDGGRQHOLQHRIFRGH7KLVZLOOJRLQEHWZHHQWKHWZROLQHVWKDWFRQWDLQ
WKHPRVWLQGHQWHGSDLURIEUDFHV {DQG } 7KHPRGLILHGYHUVLRQLVVKRZQLQ([DP
SOHZLWKWKHQHZOLQHLQEROG
([DPSOH7KHWUDGLWLRQDOILUVWH[DPSOH+HOORZRUOG
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;

namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, world");
}
}
}

7KLV H[DPSOH LV QRZ UHDG\ WR UXQ )URP WKH 'HEXJ PHQX VHOHFW WKH 6WDUW :LWKRXW
'HEXJJLQJLWHPRUMXVWSUHVV&WUO)7KHSURJUDPZLOOUXQDQGEHFDXVH\RXYHZULW
WHQDFRQVROHDSSOLFDWLRQDFRQVROHZLQGRZZLOORSHQ7KHILUVWOLQHRIWKLVZLQGRZ
ZLOOFRQWDLQWKHWH[W+HOORZRUOGDQGWKLVZLOOEHIROORZHGE\DSURPSWVD\LQJ3UHVV
DQ\NH\WRFRQWLQXH2QFH\RXYHILQLVKHGDGPLULQJWKHIUXLWVRI\RXUFUHDWLRQSUHVV
DNH\WRGLVPLVVWKHZLQGRZ
'RQWXVH'HEXJ6WDUW'HEXJJLQJRU)WKLVZLOOUXQWKHDSSOLFDWLRQ
LQ 9LVXDO 6WXGLRV GHEXJJLQJ PRGH ZKLFK GRHVQW NHHS WKH ZLQGRZ
RSHQRQFHWKHDSSOLFDWLRQKDVILQLVKHG7KDWVQRWKHOSIXOIRUWKLVH[
DPSOH ZKLFK ZLOO PRVW OLNHO\ UXQ WR FRPSOHWLRQ DQG WKHQ FORVH WKH
ZLQGRZEHIRUH\RXYHKDGDFKDQFHWRVHHWKHRXWSXW

Getting Started | 13

1RZWKDWZHKDYHDFRPSOHWHSURJUDPOHWVORRNDWWKHFRGHWRVHHZKDWHDFKSDUWLV
IRUDOORIWKHSLHFHVDUHWKLQJV\RXOOGHDOZLWKHYHU\WLPH\RXZULWHLQ&6WDUWLQJ
IURPWKHWRS3URJUDPFVKDVVHYHUDOOLQHVEHJLQQLQJZLWKusing
using
using
using
using

System;
System.Collections.Generic;
System.Linq;
System.Text;

7KHVHXVLQJGLUHFWLYHVKHOSWKH&FRPSLOHUZRUNRXWZKDWH[WHUQDOFRGHWKLVSDUWLFXODU
VRXUFH ILOH ZLOO EH XVLQJ 1R FRGH LV DQ LVODQGWR JHW DQ\ XVHIXO ZRUN GRQH \RXU
SURJUDPVZLOOUHO\RQRWKHUFRGH$OO&SURJUDPVGHSHQGRQWKH1(7)UDPHZRUN
FODVVOLEUDU\IRUH[DPSOHWKHRQHOLQHRIFRGHZHDGGHGWRRXUSURJUDPXVHVWKHFODVV
OLEUDU\WRGLVSOD\DPHVVDJH8VLQJGLUHFWLYHVFDQGHFODUHDQLQWHQWWRXVHFODVVHVIURP
DQ\OLEUDU\\RXUV0LFURVRIWVRUDQ\RQHV$OOWKHGLUHFWLYHVLQRXUH[DPSOHVWDUW
ZLWKSystemZKLFKLQGLFDWHVWKDWZHZDQWWRXVHVRPHWKLQJIURPWKH1(7)UDPHZRUN
7KLVWH[WWKDWIROORZVWKHusingNH\ZRUGGHQRWHVDQDPHVSDFH

Namespaces and Types


7KH1(7)UDPHZRUNFODVVOLEUDU\LVELJ7RPDNHLWHDVLHUWRILQG\RXUZD\DURXQG
WKH PDQ\ VHUYLFHV LW RIIHUV WKH OLEUDU\ LV VSOLW LQWR QDPHVSDFHV )RU H[DPSOH WKH
System.IOQDPHVSDFHRIIHUV,2 ,QSXW2XWSXW VHUYLFHVVXFKDVZRUNLQJZLWKILOHVRQ
GLVNZKLOHSystem.Data.SqlClientLVIRUFRQQHFWLQJWRD64/6HUYHUGDWDEDVH
$QDPHVSDFHFRQWDLQVW\SHV$W\SHW\SLFDOO\UHSUHVHQWVHLWKHUDNLQGRILQIRUPDWLRQRU
DNLQGRIREMHFW)RUH[DPSOHWKHUHDUHW\SHVWKDWSURYLGHWKHFRUHIRUPVRILQIRUPDWLRQ
XVHGLQDOOSURJUDPVVXFKDVSystem.StringZKLFKUHSUHVHQWVWH[WRUWKHYDULRXVQX
PHULFW\SHVVXFKDV System.DoubleRU System.Int326RPHW\SHVDUHPRUHFRPSOH[
IRUH[DPSOHWKH System.Net.HttpWebRequestFODVVUHSUHVHQWVDQ+773UHTXHVWWREH
VHQWWRDZHEVHUYHU$IHZW\SHVGRQRWUHSUHVHQWDQ\SDUWLFXODUWKLQJEXWVLPSO\RIIHU
DVHWRIVHUYLFHVVXFKDVWKHSystem.MathFODVVZKLFKSURYLGHVPDWKHPDWLFDOIXQFWLRQV
VXFKDVSinDQGLogDQGFRQVWDQWVVXFKDVRUWKHEDVHRIQDWXUDOORJDULWKPVH :H
ZLOOH[SORUHWKHQDWXUHRIW\SHVREMHFWVDQGYDOXHVLQPXFKPRUHGHWDLOLQWKHQH[W
FKDSWHU
$OOW\SHVLQWKH1(7)UDPHZRUNFODVVOLEUDU\EHORQJWRDQDPHVSDFH7KHSXUSRVHRI
DXVLQJGLUHFWLYHLVWRVDYH\RXIURPW\SLQJWKHQDPHVSDFHHYHU\VLQJOHWLPH\RXQHHG
WRXVHDFODVV)RUH[DPSOHLQDILOHWKDWKDVDusing System;GLUHFWLYH\RXFDQMXVWZULWH
Math.PIWRJHWWKHYDOXHRILQVWHDGRIXVLQJWKHIXOOQDPHSystem.Math.PI<RXUHQRW
UHTXLUHGWRZULWHXVLQJGLUHFWLYHVE\WKHZD\LI\RXKDSSHQWRHQMR\W\SLQJ\RXUH
IUHHWRXVHWKHIXOO\TXDOLILHGQDPH%XWVLQFHVRPHQDPHVSDFHVJHWTXLWHORQJIRU
H[DPSOHSystem.Windows.Media.Imaging\RXFDQVHHKRZWKHVKRUWKDQGHQDEOHGE\
DXVLQJGLUHFWLYHFDQUHGXFHFOXWWHUFRQVLGHUDEO\
<RXPLJKWEHZRQGHULQJZK\QDPHVSDFHVDUHQHHGHGDWDOOLIWKHILUVWWKLQJZHXVXDOO\
GR LV DGG D EXQFK RI XVLQJ GLUHFWLYHV WR DYRLG KDYLQJ WR PHQWLRQ WKH QDPHVSDFH
14 | Chapter 2:Basic Programming Techniques

DQ\ZKHUHHOVH2QHUHDVRQLVGLVDPELJXDWLRQVRPHW\SHQDPHVFURSXSLQPXOWLSOH
SODFHV)RUH[DPSOHWKH$631(7ZHEIUDPHZRUNKDVDW\SHFDOOHG ControlDQGVR
GRERWK:3)DQG:LQGRZV)RUPV7KH\UHSUHVHQWVLPLODUFRQFHSWVEXWWKH\DUHXVHG
LQFRPSOHWHO\GLIIHUHQWFRQWH[WV ZHEDSSOLFDWLRQVYHUVXV:LQGRZVDSSOLFDWLRQV $O
WKRXJKDOORIWKHVHW\SHVDUHFDOOHGControlWKH\DUHGLVWLQFWWKDQNVWREHLQJLQGLIIHUHQW
QDPHVSDFHV
7KLVGLVDPELJXDWLRQDOVROHDYHV\RXIUHHWRXVHZKDWHYHUQDPHV\RXZDQWLQ\RXURZQ
FRGHHYHQLIVRPHQDPHVKDSSHQWREHXVHGDOUHDG\LQSDUWVRIWKH1(7FODVVOLEUDU\
\RXQHYHUNQHZH[LVWHG6LQFHWKHUHDUHPRUHWKDQW\SHVLQWKHIUDPHZRUNLWV
HQWLUHO\SRVVLEOHWKDW\RXPLJKWSLFNDQDPHWKDWVDOUHDG\EHLQJXVHGEXWQDPHVSDFHV
PDNHWKLVOHVVRIDSUREOHP)RUH[DPSOHWKHUHVDBoldFODVVLQ1(7EXWLI\RXKDSSHQ
QRWWREHXVLQJSDUWRIWKHOLEUDU\LWEHORQJVWR :3)VWH[WVHUYLFHV \RXPLJKWZHOO
ZDQWWRXVHWKHQDPHBoldWRPHDQVRPHWKLQJHOVHLQ\RXURZQFRGH$QGVLQFH1(7V
RZQBoldW\SHLVKLGGHQDZD\LQWKHSystem.Windows.DocumentsQDPHVSDFHDVORQJDV
\RXGRQWDGGDXVLQJGLUHFWLYHIRUWKDWQDPHVSDFH\RXUHIUHHWRXVHWKHQDPH Bold
\RXUVHOIWRPHDQZKDWHYHU\RXOLNH
(YHQZKHQWKHUHVQRDPELJXLW\QDPHVSDFHVKHOS\RXILQG\RXUZD\DURXQGWKHFODVV
OLEUDU\UHODWHGW\SHVWHQGWREHJURXSHGLQWRRQHQDPHVSDFHRUDJURXSRIUHODWHG
QDPHVSDFHV )RUH[DPSOHWKHUHDUHYDULRXVQDPHVSDFHVVWDUWLQJZLWKSystem.WebFRQ
WDLQLQJW\SHVXVHGLQ$631(7ZHEDSSOLFDWLRQV 6RUDWKHUWKDQVHDUFKLQJWKURXJK
WKRXVDQGVRIW\SHVIRUZKDW\RXQHHG\RXFDQEURZVHWKURXJKWKHQDPHVSDFHVWKHUH
DUHRQO\DIHZKXQGUHGRIWKRVH
<RXFDQVHHDFRPSOHWHOLVWRI1(7)UDPHZRUNFODVVOLEUDU\QDPHVSD
FHVDORQJZLWKDVKRUWGHVFULSWLRQRIZKDWHDFKRQHLVIRUDWKWWSPVGQ
PLFURVRIWFRPOLEUDU\PV

9LVXDO6WXGLRDGGVIRXUQDPHVSDFHGLUHFWLYHVWRWKH3URJUDPFVILOHLQDQHZFRQVROH
SURMHFW7KHSystemQDPHVSDFHFRQWDLQVJHQHUDOSXUSRVHVHUYLFHVLQFOXGLQJEDVLFGDWD
W\SHVVXFKDVStringDQGYDULRXVQXPHULFW\SHV,WDOVRFRQWDLQVWKH ConsoleW\SHRXU
SURJUDPXVHVWRGLVSOD\LWVJUHHWLQJDQGZKLFKSURYLGHVRWKHUFRQVROHUHODWHGVHUYLFHV
VXFKDVUHDGLQJNH\ERDUGLQSXWDQGFKRRVLQJWKHFRORURI\RXURXWSXWWH[W
7KHUHPDLQLQJWKUHHXVLQJGLUHFWLYHVDUHQWXVHGLQRXUH[DPSOH9LVXDO6WXGLRDGGV
WKHPWRQHZO\FUHDWHGSURMHFWVEHFDXVHWKH\DUHOLNHO\WREHXVHIXOLQPDQ\DSSOLFDWLRQV
7KH System.Collections.GenericQDPHVSDFHFRQWDLQVW\SHVIRUZRUNLQJZLWKFROOHF
WLRQVRIWKLQJVVXFKDVDOLVWRIQXPEHUV7KH System.LinqQDPHVSDFHFRQWDLQVW\SHV
XVHGIRU/,14ZKLFKSURYLGHVFRQYHQLHQWZD\VRISURFHVVLQJFROOHFWLRQVRILQIRUPD
WLRQLQ&$QGWKHSystem.TextQDPHVSDFHFRQWDLQVW\SHVXVHIXOIRUZRUNLQJZLWKWH[W
7KHXVLQJGLUHFWLYHV9LVXDO6WXGLRDGGVWRDQHZ&ILOHDUHWKHUHMXVWWRVDYH\RXVRPH
W\SLQJ<RXDUHIUHHWRUHPRYHWKHPLI\RXKDSSHQQRWWREHXVLQJWKRVHQDPHVSDFHV
$QG\RXFDQDGGPRUHRIFRXUVH
Namespaces and Types | 15

Removing Unwanted Using Directives


7KHUHVDTXLFNZD\WRUHPRYHXQZDQWHGXVLQJGLUHFWLYHV,I\RXULJKWFOLFNDQ\ZKHUH
RQ \RXU & FRGH WKH FRQWH[W PHQX RIIHUV DQ 2UJDQL]H 8VLQJV LWHP 7KLV RSHQV D
VXEPHQXWKDWLQFOXGHVD5HPRYH8QXVHG8VLQJVLWHPWKLVZRUNVRXWZKLFKXVLQJ
GLUHFWLYHVDUHVXUSOXVWRUHTXLUHPHQWVDQGUHPRYHVWKHP7KHVXEPHQXRIIHUVDQRWKHU
RSWLRQGHVLJQHGWRDSSHDOWRWKRVHZKROLNHWRNHHSWKHLUVRXUFHFRGHWLG\LWV5HPRYH
DQG6RUWHQWU\FDQUHPRYHXQXVHGXVLQJVWDWHPHQWVDQGWKHQVRUWWKHUHVWLQWRDOSKD
EHWLFDORUGHU7KLVPHQXLVVKRZQLQ)LJXUH

)LJXUH7LG\LQJXSXVLQJGLUHFWLYHV

7KHXVLQJGLUHFWLYHVDUHQRWWKHHQGRIRXUVLPSOHSURJUDPVHQFRXQWHUZLWKQDPH
VSDFHV,QIDFWWKHYHU\QH[WOLQHRIFRGHDIWHUWKHVHGLUHFWLYHVLVDOVRFRQFHUQHGZLWK
QDPHVSDFHV
namespace HelloWorld
{
...
}

:KLOHXVLQJGLUHFWLYHVGHFODUHZKLFKQDPHVSDFHVRXUFRGHFRQVXPHVWKLV namespace
NH\ZRUGWHOOVWKHFRPSLOHUZKDWQDPHVSDFHZHSODQWRSURYLGHWKHW\SHVZHZULWHLQ
RXUSURJUDPVEHORQJWRQDPHVSDFHVMXVWOLNHWKHW\SHVLQWKHFODVVOLEUDU\ +HUH9LVXDO
6WXGLRKDVSUHVXPHGWKDWZHGOLNHWRSXWRXUFRGHLQWRDQDPHVSDFHQDPHGDIWHUWKH
SURMHFWZHFUHDWHG7KLVLVDFRPPRQSUDFWLFHDOWKRXJK\RXUHIUHHWRXVHZKDWHYHU
6WULFWO\VSHDNLQJ\RXFDQOHDYHRXWWKHQDPHVSDFHLQZKLFKFDVH\RXUW\SHVZLOOHQGXSLQWKHVRFDOOHG
JOREDOQDPHVSDFH%XWWKLVLVFRQVLGHUHGDSRRUSUDFWLFH\RXOOQRUPDOO\ZDQW\RXURZQFRGHWRUHDSWKH
VDPHEHQHILWVWKDWFODVVOLEUDULHVJHWIURPQDPHVSDFHV

16 | Chapter 2:Basic Programming Techniques

QDPHV\RXOLNHIRU\RXUQDPHVSDFHVWKHUHVQRUHTXLUHPHQWWKDWWKHQDPHVSDFHQDPH
PDWFKWKHSURJUDPQDPH
7KH&FRPSLOHUZLOOHYHQOHW\RXSXW\RXURZQFRGHLQWRQDPHVSDFHV
ZKRVHQDPHVEHJLQZLWK SystemEXW\RXVKRXOGQRWGRWKLV DWOHDVW
QRWXQOHVV\RXZRUNIRU0LFURVRIWDQGDUHDGGLQJW\SHVWRVRPHIXWXUH
YHUVLRQRI1(7VFODVVOLEUDU\ <RXUHOLNHO\WRFDXVHFRQIXVLRQLI\RX
EUHDNWKHFRQYHQWLRQWKDWSystemQDPHVSDFHVFRQWDLQ1(7)UDPHZRUN
W\SHV

1RWLFHWKDWWKHQDPHVSDFHLVIROORZHGE\DQRSHQEUDFH { &XVHVEUDFHVWRGHQRWH
FRQWDLQPHQWKHUH HYHU\WKLQJ LQVLGH WKHVH EUDFHV ZLOO EH LQ RXU HelloWorld QDPH
VSDFH6LQFHQDPHVSDFHVFRQWDLQW\SHVLWVKRXOGFRPHDVQRJUHDWVXUSULVHWKDWWKH
QH[WOLQHLQWKHILOHGHILQHVDW\SH6SHFLILFDOO\LWGHILQHVDFODVV
7KH1(7)UDPHZRUNFODVVOLEUDU\LVQWWKHRQO\WKLQJWKDWJHWVWRGHILQHFODVVHVLQ
IDFWLI\RXZDQWWRZULWHDQ\FRGHDWDOOLQ&\RXPXVWSURYLGHDW\SHWRFRQWDLQWKDW
FRGH6RPHODQJXDJHV VXFKDV& GRQRWLPSRVHWKLVFRQVWUDLQWEXW&LVDQREMHFW
RULHQWHG 22 SURJUDPPLQJODQJXDJH:HOOH[SORUH22FRQFHSWVLQWKHQH[WFKDSWHU
EXWWKHPDLQLPSDFWRQRXU+HOORZRUOGH[DPSOHLVWKDWHYHU\ELWRI&FRGHPXVW
KDYHDW\SHWKDWLWFDOOVKRPH
7KHUHDUHDIHZGLIIHUHQWZD\VWRGHILQHW\SHVLQ&ZKLFKZHOOJHWWRLQWKHQH[WIHZ
FKDSWHUVEXWIRUWKHSUHVHQWVLPSOHH[DPSOHWKHGLVWLQFWLRQVDUHQRW\HWUHOHYDQW6R
ZHXVHWKHPRVWFRPPRQDFODVV
class Program
{
...
}

$JDLQQRWHWKHEUDFHVDVZLWKWKHQDPHVSDFHFRQWHQWVWKHFODVVVFRQWHQWVDUHGH
OLQHDWHGE\DSDLURIEUDFHV
:HUHVWLOOQRWTXLWHDWWKHFRGH\HWFRGHOLYHVLQVLGHDFODVVEXWPRUHVSHFLILFDOO\LW
PXVWOLYHLQVLGHDSDUWLFXODUPHWKRGLQVLGHDFODVV$PHWKRGLVDQDPHGEORFNRIFRGH
ZKLFKPD\RSWLRQDOO\UHWXUQVRPHGDWD7KHFODVVLQRXUH[DPSOHGHILQHVDPHWKRG
FDOOHGMainDQGRQFHDJDLQZHXVHDSDLURIEUDFHVWRVKRZZKHUHLWVWDUWVDQGHQGV
static void Main(string[] args)
{
...
}

7KHILUVWNH\ZRUGKHUHstaticWHOOV&WKDWLWVQRWQHFHVVDU\WRFUHDWHDProgramREMHFW
Program EHLQJ WKH FODVV WKDW FRQWDLQV WKLV PHWKRG UHPHPEHU  LQ RUGHU WR XVH WKLV
PHWKRG$V\RXOOVHHLQWKHQH[WFKDSWHUDORWRIPHWKRGVUHTXLUHDQREMHFWEXWRXU
VLPSOHH[DPSOHGRHVQWQHHGRQH

Namespaces and Types | 17

7KHQH[WNH\ZRUGLVvoid7KLVWHOOVWKHFRPSLOHUWKDWRXUPHWKRGGRHVQWUHWXUQDQ\
GDWDLWMXVWGRHVVRPHZRUN0DQ\PHWKRGVUHWXUQLQIRUPDWLRQ)RUH[DPSOHWKH
System.MathFODVVV CosPHWKRGFDOFXODWHVWKHFRVLQHRILWVLQSXWDQGVLQFHLWGRHVQW
NQRZZKDW\RXZDQWWRGRZLWKWKDWUHVXOWLWSURYLGHVLWDVDUHWXUQYDOXHWKHRXWSXW
RI WKHPHWKRG%XWWKHFRGH LQ WKLV H[DPSOH LV UDWKHU PRUH SURDFWLYH WKDQ WKDWLW
GHFLGHVWRVKRZDPHVVDJHRQWKHVFUHHQVRWKHUHVQRWKLQJIRULWWRUHWXUQ2QPHWK
RGVWKDWUHWXUQGDWD\RXGZULWHWKHW\SHRIGDWDEHLQJUHWXUQHGKHUHEXWVLQFHWKHUHV
QRWKLQJWRUHWXUQLQWKLVFDVHWKHQRWKLQJQHVVLVGHQRWHGE\WKHvoidNH\ZRUG
7KHQH[WSDUWMainLVWKHQDPHRIWKHPHWKRG7KLVKDSSHQVWREHDVSHFLDOQDPH
WKH&FRPSLOHUZLOOH[SHFW\RXUSURJUDPWRSURYLGHRQHVWDWLFPHWKRGFDOOHG Main
DQGLWOOUXQWKDWPHWKRGZKHQWKHSURJUDPLVODXQFKHG
7KHPHWKRGQDPHLVIROORZHGE\DSDUDPHWHUOLVWZKLFKGHFODUHVWKHLQSXWWKHPHWKRG
UHTXLUHV7KLVSDUWLFXODUH[DPSOHVSDUDPHWHUOLVWLV(string[] args)ZKLFKVD\VWKDW
LWH[SHFWVMXVWDVLQJOHLQSXWDQGWKDWWKHFRGHZLOOUHIHUWRLWXVLQJWKHQDPH args,W
H[SHFWVWKLVLQSXWWREHDVHTXHQFHRIWH[WVWULQJV WKHVTXDUHEUDFNHWVLQGLFDWLQJWKDW
PXOWLSOHVWULQJVPD\EHSDVVHGLQVWHDGRIMXVWRQH $VLWKDSSHQVWKLVSDUWLFXODUSUR
JUDPGRHVQWXVHWKLVLQSXWEXWLWVDVWDQGDUGIHDWXUHRIWKHVSHFLDOO\QDPHG Main
PHWKRGFRPPDQGOLQHDUJXPHQWVDUHSDVVHGLQKHUH:HOOUHWXUQWRWKLVODWHULQWKH
FKDSWHUZKHQZHZULWHDSURJUDPWKDWPDNHVXVHRIFRPPDQGOLQHDUJXPHQWVEXWIRU
QRZRXUH[DPSOHGRHVQWXVHLW6RZHOOPRYHRQWRWKHILQDOSDUWRIWKHH[DPSOH
WKHFRGHLQVLGHWKH MainPHWKRGWKDWZDVWKHRQHSDUWZHDGGHGWR9LVXDO6WXGLRV
FRQWULEXWLRQVDQGZKLFKUHSUHVHQWVWKHRQO\ZRUNWKLVSURJUDPGRHV
Console.WriteLine("Hello, world");

7KLVVKRZVWKH&V\QWD[IRULQYRNLQJDPHWKRG+HUHZHUHXVLQJDPHWKRGSURYLGHG
E\WKHConsoleFODVVZKLFKLVSDUWRIWKH1(7)UDPHZRUNFODVVOLEUDU\DQGLWLVGHILQHG
LQWKHSystemQDPHVSDFH:HFRXOGKDYHZULWWHQWKHIXOO\TXDOLILHGQDPHLQZKLFKFDVH
WKHFRGHZRXOGORRNOLNHWKLV
System.Console.WriteLine("Hello, world");

%XWEHFDXVHRIWKH using System;GLUHFWLYHHDUOLHUZHFDQXVHWKHVKRUWHUYHUVLRQLW


PHDQVWKHVDPHWKLQJLWVMXVWPRUHFRQFLVH7KHConsoleFODVVSURYLGHVWKHDELOLW\WR
GLVSOD\WH[WLQDFRQVROHZLQGRZDQGWRUHDGLQSXWW\SHGE\WKHXVHULQDQROGIDVKLRQHG
FRPPDQGOLQHDSSOLFDWLRQ,QWKLVFDVHZHUHLQYRNLQJWKHFODVVVWriteLinePHWKRG
SDVVLQJLWWKHWH[W"Hello, world"7KHWriteLinePHWKRGZLOOZULWHZKDWHYHUWH[WZH
SURYLGHRXWWRWKHFRQVROHZLQGRZ

7KLVLVWKHHVVHQWLDOGLIIHUHQFHEHWZHHQWKHVRFDOOHGIXQFWLRQDODQGSURFHGXUDODSSURDFKHVWRFRGLQJE\WKH
ZD\ &RGH WKDW MXVW SHUIRUPV D FRPSXWDWLRQ RU FDOFXODWLRQ DQG UHWXUQV WKH UHVXOW LV FDOOHG IXQFWLRQDO
EHFDXVHLWVVLPLODULQQDWXUHWRPDWKHPDWLFDOIXQFWLRQVVXFKDVFRVLQHDQGVTXDUHURRW3URFHGXUDOFRGH
WHQGVWRSHUIRUPDVHTXHQFHRIDFWLRQV,QVRPHODQJXDJHVVXFKDV)WKHIXQFWLRQDOVW\OHGRPLQDWHVEXW
&SURJUDPVW\SLFDOO\XVHDPL[WXUHRIERWKVW\OHV

18 | Chapter 2:Basic Programming Techniques

<RXOOKDYHQRWLFHGWKDWWKHGRW . LVEHLQJXVHGWRPHDQGLIIHUHQWWKLQJV
KHUH:HFDQXVHLWWRGHOLQHDWHWKHQDPHVSDFHQDPHDQGWKHW\SHQDPH
IRU H[DPSOH System.Console PHDQV WKH Console W\SH LQ WKH System
QDPHVSDFH,WFDQDOVREHXVHGWREUHDNXSDQDPHVSDFHQDPHDVLQ
System.IO2XUH[DPSOHDOVRXVHVLWWRLQGLFDWHWKDWZHZDQWWRXVHD
SDUWLFXODUPHWKRGSURYLGHGE\DFODVVDVLQConsole.WriteLine$QGDV
\RXOOVHHWKHGRWWXUQVXSLQDIHZRWKHUSODFHVLQ&
%URDGO\VSHDNLQJWKHGRWVLJQLILHVWKDWZHZDQWWRXVHVRPHWKLQJWKDWV
LQVLGHVRPHWKLQJHOVH7KH&FRPSLOHUZRUNVRXWIURPFRQWH[WH[DFWO\
ZKDWWKDWPHDQV

$OWKRXJKZHSLFNHGRYHUHYHU\OLQHRIFRGHLQWKLVVLPSOHH[DPSOHZHKDYHQWTXLWH
ILQLVKHG H[SORULQJ ZKDW 9LVXDO 6WXGLR GLG IRU XV ZKHQ ZH DVNHG LW WR FUHDWH D QHZ
DSSOLFDWLRQ7RIXOO\DSSUHFLDWHLWVZRUNZHQHHGWRVWHSRXWRIWKH3URJUDPFVVRXUFH
ILOHDQGORRNDWWKHZKROHSURMHFW

Projects and Solutions


,WVUDUHIRUDXVHIXOSURJUDPWREHVRVLPSOHWKDW\RXZRXOGZDQWDOORILWVVRXUFHFRGH
LQRQHILOH<RXPD\RFFDVLRQDOO\VWXPEOHDFURVVKRUURUVVXFKDVDVLQJOHILOHFRQWDLQLQJ
WHQVRIWKRXVDQGVRIOLQHVRIFRGHEXWLQWKHLQWHUHVWRITXDOLW\ DQGVDQLW\ LWVEHVWWR
WU\WRNHHS\RXUVRXUFHFRGHLQVPDOOHUPRUHPDQDJHDEOHFKXQNVWKHODUJHUDQGPRUH
FRPSOH[DQ\WKLQJJHWVWKHPRUHOLNHO\LWLVWRFRQWDLQIODZV6R9LVXDO6WXGLRLVEXLOWWR
ZRUNZLWKPXOWLSOHVRXUFHILOHVDQGLWSURYLGHVDFRXSOHRIFRQFHSWVIRUVWUXFWXULQJ
\RXUSURJUDPVDFURVVWKRVHILOHVSURMHFWVDQGVROXWLRQV
$SURMHFWLVDFROOHFWLRQRIVRXUFHILOHVWKDWWKH&FRPSLOHUFRPELQHVWRSURGXFHD
VLQJOHRXWSXWW\SLFDOO\HLWKHUDQH[HFXWDEOHSURJUDPRUDOLEUDU\ 6HHWKHVLGHEDURQ
WKHQH[WSDJHIRUPRUHGHWDLOVRQWKHFRPSLODWLRQSURFHVV 7KHXVXDOFRQYHQWLRQLQ
:LQGRZVLVWKDWH[HFXWDEOHILOHVKDYHDQH[HH[WHQVLRQZKLOHOLEUDULHVKDYHDGOOH[
WHQVLRQ 7KHVHH[WHQVLRQVDUHVKRUWIRUH[HFXWDEOHDQGG\QDPLFOLQNOLEUDU\UHVSHF
WLYHO\ 7KHUHLVQWDELJGLIIHUHQFHEHWZHHQWKHWZRNLQGVRIILOHWKHPDLQGLVWLQFWLRQ
LVWKDWDQH[HFXWDEOHSURJUDPLVUHTXLUHGWRKDYHDQHQWU\SRLQWWKHMainIXQFWLRQ$
OLEUDU\LVQRWVRPHWKLQJ\RXGUXQLQGHSHQGHQWO\LWVGHVLJQHGWREHXVHGE\RWKHU
SURJUDPVVRD'//GRHVQWKDYHLWVRZQHQWU\SRLQW2WKHUWKDQWKDWWKH\UHSUHWW\
PXFKWKHVDPHWKLQJWKH\UHMXVWILOHVWKDWFRQWDLQFRGHDQGGDWD 7KHWZRW\SHVRI
ILOHDUHVRVLPLODUWKDW\RXFDQXVHDQH[HFXWDEOHDVWKRXJKLWZHUHDOLEUDU\ 6R9LVXDO
6WXGLRSURMHFWVZRUNLQPXFKWKHVDPHZD\IRUSURJUDPVDQGOLEUDULHV

Projects and Solutions | 19

Source Code, Binary, and Compilation


7KHH[HDQGGOOILOHVSURGXFHGE\9LVXDO6WXGLRGRQRWFRQWDLQ\RXUVRXUFHFRGH,I
\RXZHUHWRORRNDWWKH+HOOR:RUOGH[HILOHSURGXFHGE\RXUH[DPSOHLWZRXOGQRW
FRQWDLQDFRS\RIWKHWH[WLQWKH3URJUDPFVILOH&LVDFRPSLOHGODQJXDJHPHDQLQJ
WKDWGXULQJWKHGHYHORSPHQWSURFHVVWKHVRXUFHLVFRQYHUWHGLQWRDELQDU\IRUPDWWKDW
LVHDVLHUIRUWKHFRPSXWHUWRH[HFXWH9LVXDO6WXGLRFRPSLOHG\RXUFRGHDXWRPDWLFDOO\
ZKHQ\RXUDQWKHSURJUDPHDUOLHU
1RWDOOODQJXDJHVZRUNWKLVZD\)RUH[DPSOH-DYD6FULSWDODQJXDJHXVHGWRDGGG\
QDPLFEHKDYLRUWRZHESDJHVGRHVQRWQHHGWREHFRPSLOHG\RXUZHEEURZVHUGRZQ
ORDGVWKHVRXUFHIRUDQ\-DYD6FULSWUHTXLUHGDQGUXQVLWGLUHFWO\%XWWKHUHDUHDIHZ
GLVDGYDQWDJHVZLWKWKLV
)LUVWVRXUFHFRGHWHQGVWREHUDWKHUYHUERVHLWVLPSRUWDQWWKDWVRXUFHFRGHEHPHDQ
LQJIXOWRKXPDQVDVZHOODVFRPSXWHUVEHFDXVHZKHQZHFRPHWRPRGLI\DSURJUDP
ZHQHHGWRXQGHUVWDQGWKHFRGHEHIRUHFKDQJLQJLW%XWDFRPSXWHUFDQZRUNZLWKYHU\
GHQVHELQDU\UHSUHVHQWDWLRQVRILQIRUPDWLRQZKLFKPDNHVLWSRVVLEOHIRUFRPSLOHGFRGH
WREHPXFKVPDOOHUWKDQWKHVRXUFHWKXVWDNLQJXSOHVVVSDFHRQGLVNDQGWDNLQJOHVV
WLPHWRGRZQORDG
6HFRQG KXPDQUHDGDEOH UHSUHVHQWDWLRQV DUH UHODWLYHO\ KDUG ZRUN IRU FRPSXWHUV WR
SURFHVVFRPSXWHUVDUHPRUHDWKRPHZLWKELQDU\WKDQZLWKWH[W&RPSLODWLRQSUR
YLGHVWKHRSSRUWXQLW\WRFRQYHUWDOOWKHKXPDQUHDGDEOHWH[WLQWRDIRUPPRUHFRQ
YHQLHQWIRUWKHFRPSXWHULQDGYDQFH6RFRPSLOHGFRGHWHQGVWRUXQIDVWHUWKDQDV\VWHP
WKDWZRUNVGLUHFWO\ZLWKWKHVRXUFH ,QIDFWDOWKRXJK-DYD6FULSWZDVQRWGHVLJQHGWR
EHFRPSLOHGPRGHUQ-DYD6FULSWHQJLQHVKDYHWDNHQWRFRPSLOLQJVFULSWDIWHUGRZQ
ORDGLQJLWWRVSHHGWKLQJVXS7KLVVWLOOOHDYHVLWDWDGLVDGYDQWDJHWRDODQJXDJHVXFKDV
&ZKHUHFRPSLODWLRQKDSSHQVGXULQJGHYHORSPHQWZKHQDVFULSWUXQVIRUWKHILUVW
WLPHZLWKVXFKDV\VWHPWKHXVHURIWKHZHESDJHKDVWRZDLWZKLOHWKHVFULSWLVGRZQ
ORDGHGDQGFRPSLOHG
6RPHODQJXDJHVFRPSLOHFRGHLQWRQDWLYHPDFKLQHODQJXDJHWKHELQDU\FRGHWKDWFDQ
EH H[HFXWHG GLUHFWO\ E\ D FRPSXWHUV &38 7KLV RIIHUV D SHUIRUPDQFH EHQHILW FRGH
FRPSLOHGLQWKLVZD\GRHVQWUHTXLUHDQ\IXUWKHUSURFHVVLQJWRUXQ+RZHYHU1(7
ODQJXDJHVGRQWGRWKLVEHFDXVHLWOLPLWVZKHUHDFRPSLOHGSURJUDPFDQH[HFXWH$V
ZHPHQWLRQHGLQWKHILUVWFKDSWHU1(7ODQJXDJHVFRPSLOHLQWRDVRFDOOHG,QWHUPHGLDWH
/DQJXDJH ,/IRUVKRUW 7KLVLVDELQDU\UHSUHVHQWDWLRQVRLWVFRPSDFWDQGHIILFLHQW
IRUFRPSXWHUVWRSURFHVVEXWLWVQRWVSHFLILFWRDQ\SDUWLFXODU&38W\SHHQDEOLQJ1(7
SURJUDPVWRUXQRQHLWKHUELWRUELWPDFKLQHVRURQGLIIHUHQW&38DUFKLWHFWXUHV
7KH1(7)UDPHZRUNFRQYHUWVWKLV,/LQWRQDWLYHPDFKLQHODQJXDJHMXVWEHIRUHUXQQLQJ
LWDWHFKQLTXHUHIHUUHGWRDV-,7 -XVW,Q7LPH FRPSLODWLRQ-,7FRPSLODWLRQRIIHUVWKH
EHVWRIERWKZRUOGVLWVPXFKIDVWHUWKDQFRPSLOLQJIURPWKHVRXUFHEXWLWVWLOOUHWDLQV
WKHIOH[LELOLW\WRWDUJHWGLIIHUHQWPDFKLQHW\SHV

20 | Chapter 2:Basic Programming Techniques

6RPHSURMHFWW\SHVSURGXFHQHLWKHUOLEUDULHVQRUH[HFXWDEOHV)RUH[
DPSOHWKHUHVDSURMHFWW\SHIRUEXLOGLQJPVL :LQGRZV,QVWDOOHU ILOHV
IURPWKHRXWSXWVRIRWKHUSURMHFWV6RVWULFWO\VSHDNLQJDSURMHFWLVD
IDLUO\DEVWUDFWLGHDLWWDNHVVRPHILOHVDQGEXLOGVWKHPLQWRVRPHNLQG
RIRXWSXW%XWSURMHFWVFRQWDLQLQJ&FRGHZLOOSURGXFHHLWKHUDQ(;(
RUD'//

$VROXWLRQLVMXVWDFROOHFWLRQRIUHODWHGSURMHFWV,I\RXDUHZULWLQJDOLEUDU\\RXOO
SUREDEO\ ZDQW WR ZULWH DQ DSSOLFDWLRQ WKDW XVHV LWHYHQ LI WKH OLEUDU\ LV XOWLPDWHO\
GHVWLQHGWREHXVHGE\RWKHUSHRSOH\RXOOVWLOOZDQWWREHDEOHWRWU\LWRXWIRUWHVWLQJ
DQGGHEXJJLQJSXUSRVHVVRLWVXVHIXOWREHDEOHWRKDYHRQHRUPRUHDSSOLFDWLRQVWKDW
H[HUFLVHWKHOLEUDU\VIXQFWLRQDOLW\%\SXWWLQJDOORIWKHVHSURMHFWVLQWRRQHVROXWLRQ
\RXFDQZRUNZLWKWKH'//DQGLWVWHVWDSSOLFDWLRQVDOODWRQFH%\WKHZD\9LVXDO
6WXGLRDOZD\VUHTXLUHVDVROXWLRQHYHQLI\RXUHEXLOGLQJMXVWRQHSURMHFWLWLVDOZD\V
FRQWDLQHGLQDVROXWLRQ7KDWVZK\WKHSURMHFWVFRQWHQWVDUHVKRZQLQDSDQHOFDOOHG
WKH6ROXWLRQ([SORUHUVKRZQLQ)LJXUH

)LJXUH+HOOR:RUOGSURMHFWLQWKH6ROXWLRQ([SORUHU

7KH6ROXWLRQ([SORUHULVXVXDOO\YLVLEOHRQWKHULJKWKDQGVLGHRI9LVXDO6WXGLREXWLI
\RXGRQWVHHLW\RXFDQRSHQLWZLWKWKH9LHZ6ROXWLRQ([SORUHUPHQXLWHP,WVKRZV
DOOWKHSURMHFWVLQWKHVROXWLRQMXVWWKH HelloWorldSURMHFWLQWKLVH[DPSOH$QGLW
VKRZVDOOWKHILOHVLQWKHVROXWLRQ\RXFDQVHHWKH3URJUDPFVILOHZHYHEHHQH[DPLQLQJ
QHDUWKHERWWRPRI)LJXUH)DUWKHUXSLVDQH[WUDILOHZHKDYHQWORRNHGDWFDOOHG
$VVHPEO\,QIRFV,I\RXRSHQWKLV\RXOOVHHWKDW9LVXDO6WXGLRSXWVYHUVLRQQXPEHUDQG
FRS\ULJKWLQIRUPDWLRQLQWKDWILOHXVHUVZLOOVHHWKLVLQIRUPDWLRQLIWKH\YLHZWKHFRP
SLOHGRXWSXWVSURSHUWLHVLQ:LQGRZV([SORUHU
Projects and Solutions | 21

<RXPLJKWILQGWKDWRQ\RXUV\VWHPWKH6ROXWLRQ([SORUHUGRHVQWVKRZ
WKH6ROXWLRQQRGHWKDWVYLVLEOHDWWKHWRSRI)LJXUHDQGMXVWVKRZV
WKHHelloWorldSURMHFW9LVXDO6WXGLRFDQEHFRQILJXUHGWRKLGHWKHVRO
XWLRQZKHQLWFRQWDLQVMXVWDVLQJOHSURMHFW,I\RXGRQWVHHWKHVROXWLRQ
DQG ZRXOG OLNH WR VHOHFW WKH 7RROV2SWLRQV PHQX LWHP DQG LQ WKH
2SWLRQVGLDORJWKDWRSHQVVHOHFWWKH3URMHFWVDQG6ROXWLRQVLWHP2QH
RIWKHRSWLRQVZLOOEHWKH$OZD\VVKRZVROXWLRQFKHFNER[FKHFNWKLV
LI\RXZDQWWRVHHWKHVROXWLRQLQWKH6ROXWLRQ([SORUHUHYHQZKHQ\RXYH
JRWRQO\RQHSURMHFW

%HVLGHVWKH&VRXUFHILOHVWKH6ROXWLRQ([SORUHUDVVKRZQLQ)LJXUHDOVRKDVD
5HIHUHQFHVVHFWLRQ7KLVFRQWDLQVDOLVWRIDOOWKHOLEUDULHV\RXUSURMHFWXVHV%\GHIDXOW
9LVXDO6WXGLRSRSXODWHVWKLVZLWKDOLVWRI'//VIURPWKH1(7)UDPHZRUNFODVVOLEUDU\
WKDWLWWKLQNV\RXPLJKWILQGXVHIXO
<RX PLJKW EH H[SHULHQFLQJ GpMj YX ULJKW QRZGLGQW ZH DOUHDG\ WHOO WKH FRPSLOHU
ZKLFKELWVRIWKHOLEUDU\ZHZDQWZLWKXVLQJGLUHFWLYHV"7KLVLVDFRPPRQFDXVHRI
FRQIXVLRQDPRQJGHYHORSHUVOHDUQLQJ&1DPHVSDFHVDUHQRWOLEUDULHVDQGQHLWKHU
RQHLVFRQWDLQHGE\WKHRWKHU7KHVHIDFWVDUHREVFXUHGE\DQDSSDUHQWFRQQHFWLRQ)RU
H[DPSOHWKHSystem.DataOLEUDU\GRHVLQIDFWGHILQHDORDGRIW\SHVLQWKHSystem.Data
QDPHVSDFH%XWWKLVLVMXVWDFRQYHQWLRQDQGRQHWKDWLVRQO\ORRVHO\IROORZHG/LEUDULHV
DUHRIWHQEXWQRWDOZD\VQDPHGDIWHUWKHQDPHVSDFHZLWKZKLFKWKH\DUHPRVWVWURQJO\
DVVRFLDWHGEXWLWVFRPPRQIRUDOLEUDU\WRGHILQHW\SHVLQVHYHUDOGLIIHUHQWQDPHVSDFHV
DQGLWVFRPPRQIRUDQDPHVSDFHVW\SHVWREHGLVWULEXWHGDFURVVVHYHUDOGLIIHUHQWOL
EUDULHV ,I\RXUHZRQGHULQJKRZWKLVFKDRVHPHUJHGVHHWKHVLGHEDUEHORZ

Namespaces and Libraries


7KHGLVWULEXWLRQRIW\SHVDFURVV'//VLQWKHFODVVOLEUDU\LVGULYHQE\DFRPELQDWLRQRI
HIILFLHQF\UHTXLUHPHQWVDQGKLVWRU\7KHSystem.CoreOLEUDU\LVDJRRGH[DPSOHRIWKH
ODWWHU 7KHUH LV QR System.Core QDPHVSDFHWKLV OLEUDU\ GHILQHV W\SHV LQ QXPHURXV
QDPHVSDFHVLQFOXGLQJ System System.IODQG System.Threading%XW\RXOODOVRILQG
W\SHVLQWKHVHVDPHWKUHHQDPHVSDFHVLQWKH SystemOLEUDU\DQGDOVRDOLEUDU\FDOOHG
mscorlib $OO1(7SURJUDPVKDYHDUHIHUHQFHWRmscorlibDQGVLQFHLWVPDQGDWRU\
9LVXDO6WXGLRGRHVQWVKRZLWLQWKH6ROXWLRQ([SORUHU,WVZKHUHFULWLFDOW\SHVVXFKDV
System.StringDQGSystem.Int32DUHGHILQHG 2QHRIWKHUHDVRQVSystem.CoreH[LVWVDV
DVHSDUDWH'//LVWKDWLWILUVWDSSHDUHGLQYHUVLRQRI1(7:LWKYHUVLRQVDQG
RI1(70LFURVRIWFKRVHWRSXWFRPSOHWHO\QHZIXQFWLRQDOLW\LQWRQHZ'//VUDWKHU
WKDQDOWHULQJWKH'//VWKDWZHUHSURYLGHGLQYHUVLRQ7KLVSDFNDJLQJGHFLVLRQ
FKRRVLQJZKLFKW\SHVJRLQZKLFK'//VZDVLQGHSHQGHQWIURPWKHFRQFHSWXDOGHFL
VLRQRIZKLFKW\SHVEHORQJLQZKLFKQDPHVSDFHV
+LVWRU\GRHVQWH[SODLQWKHZKROHVWRU\WKRXJK(YHQWKHYHU\ILUVWYHUVLRQRI1(7
VSOLWLWVQDPHVSDFHVDFURVVPXOWLSOHOLEUDULHV2QHFRPPRQUHDVRQIRUWKLVZDVWRDYRLG
ORDGLQJFRGHWKDWLVQHYHUXVHG<RXZRXOGQWZDQWDGHVNWRSDSSOLFDWLRQWRZDVWHWLPH
DQG PHPRU\ E\ ORDGLQJ WKH OLEUDULHV IRU EXLOGLQJ ZHE DSSOLFDWLRQV ,Q VRPH FDVHV
22 | Chapter 2:Basic Programming Techniques

QDPHVSDFHVDUHDFWXDOO\DSUHWW\JRRGJXLGHWRSDUWLWLRQLQJFKDQFHVDUHJRRGWKDWLI
\RXXVHRQHW\SHIURPRQHRIWKHSystem.WebQDPHVSDFHV\RXUHJRLQJWREHXVLQJORWV
RIWKHP%XWWKHUHDUHDIHZFDVHVLQZKLFKQDPHVSDFHVDUHQRWWKHEHVWZD\WRGHWHUPLQH
SDFNDJLQJ)RUH[DPSOHWKH System.PrintingQDPHVSDFHLVVSOLWDFURVVWZROLEUDULHV
WKH System.PrintingOLEUDU\FRQWDLQVJHQHUDOSULQWUHODWHGFODVVHVEXWWKH ReachFrame
workOLEUDU\DGGVH[WUDW\SHVWRWKHQDPHVSDFHWKDW\RXPD\QHHGLI\RXUHZRUNLQJ
ZLWKDSDUWLFXODUNLQGRISULQWDEOHGRFXPHQWFDOOHGDQ;36ILOH,I\RXUHQRWXVLQJWKDW
IHDWXUH\RXGRQWQHHGDUHIHUHQFHWRWKDWVSHFLDOL]HG'//
7KLVUDLVHVDTXHVWLRQKRZGR\RXNQRZZKHUHWRILQGWKLQJV",WVIUXVWUDWLQJZKHQ
DGGLQJDUHIHUHQFHWRWKHSystem.PrintingOLEUDU\IDLOVWRJLYH\RXDFFHVVWRWKHW\SHVLQ
WKHSystem.PrintingQDPHVSDFHWKDW\RXZHUHORRNLQJIRU)RUWXQDWHO\WKHKHOSSDJHV
IRUHDFKW\SHWHOO\RXERWKWKHQDPHVSDFHDQGWKHOLEUDU\ILOH DVVHPEO\ FRQWDLQLQJWKH
W\SH

7KHXSVKRWLVWKDWWKH&FRPSLOHUFDQQRWZRUNRXWZKLFKOLEUDULHV\RXZDQWIURP
\RXUXVLQJGLUHFWLYHVEHFDXVHLQJHQHUDOLWVQRWSRVVLEOHWRGHGXFHZKLFKOLEUDULHVDUH
UHTXLUHGIURPWKHQDPHVSDFHVDORQH6RDSURMHFWQHHGVWROLVWZKLFKOLEUDULHVLWXVHV
DQGWKHQLQGLYLGXDOVRXUFHILOHVLQWKDWSURMHFWFDQGHFODUHZKLFKQDPHVSDFHVWKH\DUH
XVLQJ9LVXDO6WXGLRSURYLGHV\RXZLWKDVHWRIUHIHUHQFHVWKDWLWKRSHVZLOOEHXVHIXO
DQGIRUWKLVYHU\VLPSOHH[DPSOHZHUHQRWDFWXDOO\XVLQJPRVWRIWKHP
9LVXDO6WXGLRQRWLFHVZKHQ\RXUFRGHGRHVQWXVHDOORIWKHOLEUDULHV\RXU
SURMHFWUHIHUHQFHVDQGDXWRPDWLFDOO\RPLWVUHIHUHQFHVWRDQ\XQXVHG
OLEUDULHV 7KLV PDNHV \RXU ELQDU\ VOLJKWO\ VPDOOHU WKDQ LW ZRXOG EH LI
XQQHFHVVDU\UHIHUHQFHVZHUHOHIWLQ

<RXFDQDGGRUUHPRYHUHIHUHQFHVWRVXLWZKDWHYHUSURJUDP\RXUHEXLOGLQJ7RUHPRYH
DUHIHUHQFH\RXFDQMXVWVHOHFWWKHOLEUDU\LQWKH6ROXWLRQ([SORUHUDQGSUHVVWKH'HOHWH
NH\ $VLWKDSSHQVRXUSURJUDPLVVRVLPSOHWKDWLWGHSHQGVRQO\RQWKHPDQGDWRU\
mscorlibOLEUDU\VR\RXFRXOGUHPRYHHYHU\'//VKRZQDQGDVORQJDV\RXDOVRUHPRYH
DQ\XQXVHGXVLQJGLUHFWLYHVIURPWKHVRXUFHFRGHWKHSURJUDPZLOOVWLOOZRUN 7RDGG
DUHIHUHQFHWRDOLEUDU\\RXFDQULJKWFOLFNRQWKH5HIHUHQFHVLWHPDQGFKRRVHWKH$GG
5HIHUHQFHPHQXLWHP:HOOH[SORUHDOORIWKLVLQPRUHGHWDLOLQ&KDSWHU
,WVDOPRVWWLPHWRPRYHRQIURP+HOORZRUOGDQGVWDUWWRH[SORUHPRUHRIWKHFRUH
ODQJXDJHIHDWXUHVEXWILUVWOHWVUHFDSZKDWZHYHVHHQ7KHRQHOLQHRIH[HFXWDEOHFRGH
LQRXUSURJUDPLQYRNHVWKH WriteLinePHWKRGRIWKH System.ConsoleFODVVWRSULQWD
PHVVDJH7KLVFRGHOLYHVLQVLGHDPHWKRGZKRVHVSHFLDOQDPHMainPDUNVLWRXWDVWKH
PHWKRGWRUXQZKHQWKHSURJUDPVWDUWV7KDWPHWKRGLVFRQWDLQHGE\DFODVVFDOOHG
ProgramEHFDXVH&UHTXLUHVDOOPHWKRGVWREHORQJWRDW\SH7KLVFODVVLVDPHPEHU
RIWKHHelloWorldQDPHVSDFHEHFDXVHZHFKRVHWRIROORZWKHFRQYHQWLRQRIKDYLQJRXU
QDPHVSDFHPDWFKWKHQDPHRIWKHFRPSLOHGELQDU\2XUSURJUDPXVHVWKHXVLQJGL
UHFWLYHVVXSSOLHGE\9LVXDO6WXGLRWREHDEOHWRUHIHUWRWKHConsoleFODVVZLWKRXWQHHGLQJ
WRVSHFLI\LWVQDPHVSDFHH[SOLFLWO\6RLI\RXWDNHRQHPRUHORRNDWWKHSURJUDP\RX
Projects and Solutions | 23

QRZ NQRZ ZKDW HYHU\ VLQJOH OLQH LV IRU ,W LV UHSURGXFHG LQ ([DPSOH  ZLWK WKH
XQXVHGXVLQJGLUHFWLYHVUHPRYHG
([DPSOH+HOORZRUOGDJDLQ ZLWKIHZHUXVLQJGLUHFWLYHV
using System;
namespace HelloWorld
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, world");
}
}
}

:LWKWKHZKROHH[DPSOHLQRQHSODFH\RXFDQVHHFOHDUO\WKDWWKHFRGHLVLQGHQWHGWR
UHIOHFWWKHVWUXFWXUH7KLVLVDFRPPRQSUDFWLFHEXWLWVQRWVWULFWO\QHFHVVDU\$VIDU
DVWKH&FRPSLOHULVFRQFHUQHGZKHQLWFRPHVWRWKHVSDFHEHWZHHQHOHPHQWVRIWKH
ODQJXDJHWKHUHVQRGLIIHUHQFHEHWZHHQDVLQJOHVSDFHPXOWLSOHVSDFHVRUWDEVRUHYHQ
EODQN OLQHVWKH V\QWD[ WUHDWV DQ\ FRQWLJXRXV TXDQWLW\ RI ZKLWHVSDFH DV LW ZRXOG D
VLQJOHVSDFH6R\RXDUHIUHHWRXVHVSDFHLQ\RXUVRXUFHFRGHWRLPSURYHOHJLELOLW\
7KLVLVZK\&UHTXLUHVWKHXVHRIEUDFHVWRLQGLFDWHFRQWDLQPHQWDQGLWVDOVRZK\
WKHUHVDVHPLFRORQDWWKHHQGRIWKHOLQHWKDWSULQWVRXWWKHPHVVDJH6LQFH&GRHVQW
FDUHZKHWKHUZHKDYHRQHVWDWHPHQWRIFRGHSHUOLQHVSOLWWKHFRGHDFURVVPXOWLSOH
OLQHVRUFUDPPXOWLSOHVWDWHPHQWVRQWRRQHOLQHZHQHHGWREHH[SOLFLWDERXWWKHHQG
RIHDFKLQVWUXFWLRQPDUNLQJLWZLWKD ;VRWKDWWKHFRPSLOHUNQRZVZKHUHHDFKQHZ
VWHSRIWKHSURJUDPEHJLQV

Comments, Regions, and Readability


:KLOHZHUHORRNLQJDWWKHVWUXFWXUHDQGOD\RXWRIVRXUFHFRGHZHQHHGWRH[DPLQHD
ODQJXDJHIHDWXUHWKDWLVH[WUHPHO\LPSRUWDQWGHVSLWHKDYLQJSUHFLVHO\QRHIIHFWRQWKH
EHKDYLRURI\RXUFRGH&OHWV\RXDGGWH[WWR\RXUVRXUFHILOHWKDWLWZLOOFRPSOHWHO\
LJQRUH7KLVPLJKWQRWVRXQGLPSRUWDQWRUHYHQXVHIXOEXWLWWXUQVRXWWREHYLWDOLI
\RXZDQWWRKDYHDQ\KRSHRIXQGHUVWDQGLQJFRGH\RXZURWHVL[PRQWKVDJR
7KHUHVDQXQIRUWXQDWHSKHQRPHQRQNQRZQDVZULWHRQO\FRGH7KLVLVFRGHWKDW
PDGHVRPHNLQGRIVHQVHWRZKRHYHUZURWHLWDWWKHWLPHEXWLVLQFRPSUHKHQVLEOHWR
DQ\RQHWU\LQJWRUHDGLWDWDODWHUGDWHHYHQLIWKHSHUVRQUHDGLQJLWLVLWVDXWKRU7KH
EHVWGHIHQVHDJDLQVWWKLVSUREOHPLVWRWKLQNFDUHIXOO\DERXWWKHQDPHV\RXJLYHWKH

:LWKWKHRGGH[FHSWLRQLQDVWULQJFRQVWDQWVXFKDVWKH+HOORZRUOGWH[WLQWKLVH[DPSOHZKLWHVSDFHLV
WUHDWHGOLWHUDOO\&SUHVXPHVWKDWLI\RXSXWVD\WKUHHVSDFHVLQVRPHWH[WHQFORVHGLQGRXEOHTXRWHV\RX
UHDOO\ZDQWWKUHHVSDFHV

24 | Chapter 2:Basic Programming Techniques

IHDWXUHVRI\RXUFRGHDQGWKHZD\\RXVWUXFWXUH\RXUSURJUDPV<RXVKRXOGVWULYHWR
ZULWH\RXUFRGHVRWKDWLWGRHVZKDWLWORRNVOLNHLWGRHV
8QIRUWXQDWHO\LWVVRPHWLPHVQHFHVVDU\WRGRWKLQJVLQDQRQREYLRXVZD\VRHYHQLI
\RXUFRGHLVVXIILFLHQWO\FOHDUWKDWLWVHDV\WRVHHZKDWLWGRHVLWPD\QRWEHDWDOOFOHDU
ZK\LWGRHVFHUWDLQWKLQJV7KLVWHQGVWRKDSSHQZKHUH\RXUFRGHPHHWVRWKHUFRGH
\RXPLJKWEHLQWHUDFWLQJZLWKDFRPSRQHQWRUDVHUYLFHWKDWVLGLRV\QFUDWLFRUMXVWSODLQ
EXJJ\DQGZKLFKZRUNVRQO\LI\RXGRWKLQJVLQDSDUWLFXODUZD\)RUH[DPSOH\RX
PLJKWILQGWKDWDFRPSRQHQWLJQRUHVWKHILUVWDWWHPSWWRGRVRPHWKLQJDQG\RXQHHG
WRDGGDUHGXQGDQWORRNLQJOLQHRIFRGHWRJHWLWWRZRUN
Frobnicator.SetTarget("");
Frobnicator.SetTarget("Norfolk");

7KHSUREOHPZLWKWKLVVRUWRIWKLQJLVWKDWLWVYHU\KDUGIRUVRPHRQHZKRFRPHVDFURVV
WKLVFRGHODWHURQWRNQRZZKDWWRPDNHRILW,VWKDWDSSDUHQWO\UHGXQGDQWOLQHGHOLE
HUDWH",VLWVDIHWRUHPRYH",QWULJXHDQGDPELJXLW\PLJKWPDNHIRUHQJDJLQJILFWLRQEXW
WKHVHFKDUDFWHULVWLFVDUHUDUHO\GHVLUDEOHLQFRGH:HQHHGVRPHWKLQJWRH[SODLQWKH
P\VWHU\DQGWKDWVWKHSXUSRVHRIDFRPPHQW6R\RXPLJKWZULWHWKLV
// Frobnicator v2.41 has a bug where it crashes occasionally if
// we try to set the target to "Norfolk". Setting it to an empty
// string first seems to work around the problem.
Frobnicator.SetTarget("");
Frobnicator.SetTarget("Norfolk");

7KLVLVQRZOHVVP\VWHULRXV6RPHRQHFRPLQJDFURVVWKLVFRGHNQRZVZK\WKHDSSD
UHQWO\UHGXQGDQWOLQHZDVDGGHG,WVFOHDUZKDWSUREOHPLWVROYHVDQGWKHFRQGLWLRQV
XQGHUZKLFKWKDWSUREOHPRFFXUVZKLFKPDNHVLWSRVVLEOHWRILQGRXWZKHWKHUWKH
SUREOHPKDVEHHQIL[HGLQWKHPRVWUHFHQWYHUVLRQRIWKHRIIHQGLQJFRPSRQHQWPDNLQJ
LWSRVVLEOHWRUHPRYHWKHIL[7KLVPDNHVLWPXFKHDVLHUWRPDLQWDLQFRGHLQWKHORQJUXQ
$V IDU DV & LV FRQFHUQHG WKLV H[DPSOH LV LGHQWLFDO WR WKH RQH ZLWKRXW FRPPHQWV
7KH //FKDUDFWHUVHTXHQFHWHOOVLWWRLJQRUHDQ\IXUWKHUWH[WXSWRWKHHQGRIWKHOLQH
6R\RXFDQHLWKHUSXWFRPPHQWVRQWKHLURZQOLQHDVVKRZQHDUOLHURUWDFNWKHPRQWR
WKHHQGRIDQH[LVWLQJOLQH
Frobnicator.SetTarget("");

// Workaround for bug in v2.41

/LNHPRVWRIWKH&IDPLO\ODQJXDJHV&VXSSRUWVWZRIRUPVRIFRPPHQWV\QWD[$V
ZHOO DV WKH VLQJOHOLQH // IRUP \RX FDQ ZULWH D FRPPHQW WKDW VSDQV PXOWLSOH OLQHV
GHQRWLQJWKHVWDUWZLWK/*DQGWKHHQGZLWK*/IRUH[DPSOH
/* This is part of a comment.
This continues to be part of the same comment.
Here endeth the comment. */

Comments, Regions, and Readability | 25

Bad Comments
:KLOH FRPPHQWV FDQ EH YHU\ XVHIXO PDQ\ VDGO\ DUH QRW 7KHUH DUH D FRXSOH RI
SDUWLFXODUO\FRPPRQPLVWDNHVSHRSOHPDNHZKHQZULWLQJFRPPHQWVDQGLWVZRUWK
GUDZLQJDWWHQWLRQWRWKHPVRWKDW\RXNQRZZKDWWRDYRLG+HUHVWKHPRVWFRPPRQ
H[DPSOH
// Setting target to empty string
Frobnicator.SetTarget("");
// Setting target to Norfolk
Frobnicator.SetTarget("Norfolk");

7KHVHFRPPHQWVMXVWUHSHDWZKDWWKHFRGHDOUHDG\VDLG7KLVLVFOHDUO\DZDVWHRIVSDFH
EXWLWVVXUSULVLQJO\FRPPRQSDUWLFXODUO\IURPLQH[SHULHQFHGGHYHORSHUV7KLVPD\EH
EHFDXVHWKH\YHEHHQWROGWKDWFRPPHQWVDUHJRRGEXWWKH\KDYHQRLGHDZKDWPDNHV
DJRRGFRPPHQW$FRPPHQWVKRXOGVD\VRPHWKLQJWKDWVQRWREYLRXVIURPWKHFRGH
DQGZKLFKLVOLNHO\WREHXVHIXOWRDQ\RQHWU\LQJWRXQGHUVWDQGWKHFRGH
7KHRWKHUFRPPRQIRUPRIEDGFRPPHQWORRNVOLNHWKLV
// Setting target to Norfolk
Frobnicator.SetTarget("Wiltshire");

+HUHWKHFRPPHQWFRQWUDGLFWVWKHFRGH,WVHHPVOLNHLWVKRXOGQWEHQHFHVVDU\WRVD\
WKDW\RXVKRXOGQWGRWKDWEXWLWVVXUSULVLQJKRZRIWHQ\RXVHHWKLVVRUWRIWKLQJLQ
UHDOFRGH,WXVXDOO\KDSSHQVEHFDXVHVRPHRQHPRGLILHGWKHFRGHZLWKRXWERWKHULQJ
WRXSGDWHWKHFRPPHQW$TXLFNUHYLHZRIWKHFRPPHQWVDIWHUDFRGHFKDQJHLVDOZD\V
ZRUWKGRLQJ 1RWOHDVWEHFDXVHLI\RXYHQRWSDLGHQRXJKDWWHQWLRQWRGHWDLOWRQRWLFH
WKDWWKHFRPPHQWVDUHQRORQJHUDFFXUDWHFKDQFHVDUHWKHUHDUHRWKHUSUREOHPV\RXYH
QRWQRWLFHG

XML Documentation Comments


,I\RXVWUXFWXUH\RXUFRPPHQWVLQDFHUWDLQZD\9LVXDO6WXGLRLVDEOHWRSUHVHQWWKH
LQIRUPDWLRQLQWKRVHFRPPHQWVLQWRROWLSVZKHQHYHUGHYHORSHUVXVH\RXUFRGH$V
([DPSOHVKRZVGRFXPHQWDWLRQFRPPHQWVDUHGHQRWHGZLWKWKUHHVODVKHVDQGWKH\
FRQWDLQ;0/HOHPHQWVGHVFULELQJWKHWDUJHWRIWKHFRPPHQWLQWKLVFDVHWKHUHVD
GHVFULSWLRQRIDPHWKRGLWVSDUDPHWHUVDQGWKHLQIRUPDWLRQLWUHWXUQV
([DPSOH;0/GRFXPHQWDWLRQFRPPHQWV
/// <summary>
/// Returns the square of the specified number.
/// </summary>
/// <param name="x">The number to square.</param>
/// <returns>The squared value.</returns>
static double Square(double x)
{
return x * x;
}

26 | Chapter 2:Basic Programming Techniques

,IDGHYHORSHUVWDUWVZULWLQJFRGHWRLQYRNHWKLVPHWKRG9LVXDO6WXGLRZLOOVKRZDSRS
XSOLVWLQJDOODYDLODEOHPHPEHUVPDWFKLQJZKDWVKHVW\SHGVRIDUDQGDOVRDGGVDWRRO
WLSVKRZLQJWKHLQIRUPDWLRQIURPWKH<summary>HOHPHQWRIWKHVHOHFWHGPHWKRGLQWKH
OLVW DV )LJXUH  VKRZV <RXOO VHH VLPLODU LQIRUPDWLRQ ZKHQ XVLQJ FODVVHV IURP
WKH1(7)UDPHZRUNGRFXPHQWDWLRQIURPLWVFODVVOLEUDULHVLVSURYLGHGDVSDUWRI
WKH1(7)UDPHZRUN6'.LQFOXGHGZLWK9LVXDO6WXGLR 7KH&FRPSLOHUFDQH[WUDFW
WKLVLQIRUPDWLRQIURP\RXUVRXUFHILOHVDQGSXWLWLQDVHSDUDWH;0/ILOHHQDEOLQJ\RX
WRSURYLGHWKHGRFXPHQWDWLRQIRUDOLEUDU\ZLWKRXWQHFHVVDULO\KDYLQJWRVKLSWKHVRXUFH
FRGH

)LJXUH6XPPDU\LQIRUPDWLRQIURP;0/GRFXPHQWDWLRQ

7KH<param>LQIRUPDWLRQVKRZVXSDV\RXVWDUWWRW\SHDUJXPHQWVDV)LJXUHVKRZV
7KH<returns>LQIRUPDWLRQGRHVQWDSSHDUKHUHEXWWKHUHDUHWRROVWKDWFDQEXLOGGRF
XPHQWDWLRQIURPWKLVLQIRUPDWLRQLQWR+70/ILOHVRUKHOSILOHV)RUH[DPSOH0LFURVRIW
SURYLGHVDWRROFDOOHG6DQGFDVWOHDYDLODEOHIURPKWWSZZZFRGHSOH[FRP6DQGFDVWOH
ZKLFKFDQJHQHUDWHGRFXPHQWDWLRQZLWKDVLPLODUVWUXFWXUHWRWKHGRFXPHQWDWLRQIRU
0LFURVRIWVRZQFODVVOLEUDULHV

)LJXUH3DUDPHWHULQIRUPDWLRQIURP;0/GRFXPHQWDWLRQ

:HUHPRYLQJRQIURP+HOORZRUOGQRZVRWKLVLVDJRRGWLPHWRFUHDWHDQHZSURMHFW
LI\RXUHIROORZLQJDORQJLQ9LVXDO6WXGLRDV\RXUHDG 6HOHFW)LOH1HZ3URMHFWRUSUHVV
&WUO6KLIW11RWHWKDWE\GHIDXOWWKLVZLOOFUHDWHDQHZVROXWLRQIRU\RXUQHZSURMHFW
7KHUHV DQ RSWLRQ LQ WKH 1HZ 3URMHFW GLDORJ WR DGG WKH QHZ SURMHFW WR WKH H[LVWLQJ
VROXWLRQEXWLQWKLVFDVHOHWLWFUHDWHDQHZRQH &UHDWHDQRWKHUFRQVROHDSSOLFDWLRQ
DQGFDOOLWRaceInfoWKHFRGHLVJRLQJWRSHUIRUPYDULRXVMREVWRDQDO\]HWKHSHUIRUP
DQFHRIDUDFHFDU/HW9LVXDO6WXGLRFUHDWHWKHSURMHFWIRU\RXDQG\RXOOHQGXSZLWK
PXFKWKHVDPHFRGHDVZHKDGLQ([DPSOHEXWZLWKWKHProgramFODVVLQDQDPH
VSDFHFDOOHGRaceInfoLQVWHDGRIHelloWorld7KHILUVWWDVNZLOOEHWRFDOFXODWHWKHDYHUDJH
VSHHGDQGIXHOFRQVXPSWLRQRIWKHFDUVRZHQHHGWRLQWURGXFHWKH&PHFKDQLVPIRU
KROGLQJDQGZRUNLQJZLWKGDWD
Comments, Regions, and Readability | 27

Variables
&PHWKRGVFDQKDYHQDPHGSODFHVWRKROGLQIRUPDWLRQ7KHVHDUHFDOOHGYDULDEOHV
EHFDXVHWKHLQIRUPDWLRQWKH\FRQWDLQPD\EHGLIIHUHQWHDFKWLPHWKHSURJUDPUXQVRU
\RXUFRGHPD\FKDQJHDYDULDEOHZKLOHWKHSURJUDPUXQV([DPSOHGHILQHVWKUHH
YDULDEOHVLQRXUSURJUDPVMainPHWKRGWRUHSUHVHQWWKHGLVWDQFHWUDYHOHGE\WKHFDU
KRZORQJLWKDVEHHQPRYLQJDQGKRZPXFKIXHOLWKDVFRQVXPHGVRIDU7KHVHYDULDEOHV
GRQWYDU\DWDOOLQWKLVH[DPSOHDYDULDEOHVYDOXHFDQFKDQJHEXWLWV2.WRFUHDWH
YDULDEOHVZKRVHYDOXHLVIL[HG
([DPSOH9DULDEOHV
static void Main(string[] args)
{
double kmTravelled = 5.14;
double elapsedSeconds = 78.74;
double fuelKilosConsumed = 2.7;
}

1RWLFHWKDWWKHYDULDEOHQDPHV kmTravelledelapsedSecondsDQGfuelKilosConsumed
DUH UHDVRQDEO\ GHVFULSWLYH ,Q DOJHEUD LWV FRPPRQ WR XVH VLQJOH OHWWHUV DV YDULDEOH
QDPHVEXWLQFRGHLWLVDJRRGSUDFWLFHWRXVHQDPHVWKDWPDNHLWFOHDUZKDWWKHYDULDEOH
KROGV
,I\RXFDQWWKLQNRIDJRRGGHVFULSWLYHQDPHIRUDYDULDEOHWKDWVRIWHQ
DV\PSWRPRIWURXEOH,WVKDUGWRZULWHFRGHWKDWZRUNVLILWVQRWFOHDU
ZKDWLQIRUPDWLRQWKHFRGHLVZRUNLQJZLWK

7KHVHQDPHVLQGLFDWHQRWMXVWZKDWWKHYDULDEOHVUHSUHVHQWEXWDOVRWKHLUXQLWV7KLVLV
RIQRVLJQLILFDQFHWRWKHFRPSLOHUZHFRXOGFDOOWKHWKUHHYDULDEOHV tom dickDQG
harryIRUDOOLWFDUHVEXWLWVXVHIXOIRUKXPDQVORRNLQJDWWKHFRGH0LVXQGHUVWDQGLQJV
DERXWZKHWKHUDSDUWLFXODUYDOXHLVLQPHWULFRULPSHULDOXQLWVKDYHEHHQNQRZQWRFDXVH
VRPHH[WUHPHO\H[SHQVLYHSUREOHPVVXFKDVWKHDFFLGHQWDOGHVWUXFWLRQRIVSDFHFUDIW
7KLVSDUWLFXODUUDFHWHDPVHHPVWRXVHWKHPHWULFV\VWHP ,I\RXUHZRQGHULQJZK\WKH
IXHO LV LQ NLORJUDPV UDWKHU WKDQ VD\ OLWHUV LWV EHFDXVH LQ KLJKSHUIRUPDQFH PRWRU
UDFLQJIXHOLVW\SLFDOO\PHDVXUHGE\ZHLJKWUDWKHUWKDQYROXPHMXVWOLNHLWLVLQDYLDWLRQ
)XHOWHQGVWRH[SDQGRUFRQWUDFWDVWKHWHPSHUDWXUHFKDQJHV\RXJHWEHWWHUYDOXHIRU
\RXUPRQH\LI\RXUHILOO\RXUFDULQWKHPRUQLQJRQDFROGGD\WKDQLQWKHPLGGOHRID
KRWGD\VRPDVVLVPRUHXVHIXOEHFDXVHLWVDPRUHVWDEOHPHDVXUH

Variable Types
$OOWKUHHRIWKHYDULDEOHGHFODUDWLRQVLQ([DPSOHVWDUWZLWKWKHNH\ZRUG double
7KLVWHOOVWKHFRPSLOHUZKDWNLQGRILQIRUPDWLRQWKHYDULDEOHKROGV)RUWKLVH[DPSOH
ZHUHFOHDUO\ZRUNLQJZLWKQXPEHUVEXW1(7RIIHUVVHYHUDOGLIIHUHQWQXPHULFW\SHV
7DEOHVKRZVWKHFRPSOHWHVHWDQGLWPD\ORRNOLNHDEHZLOGHULQJDVVRUWPHQWRI
28 | Chapter 2:Basic Programming Techniques

RSWLRQV EXW LQ SUDFWLFH WKH FKRLFH XVXDOO\ JRHV RQH RI WKUHH ZD\V int double RU
decimalZKLFKUHSUHVHQWLQWHJHUVIORDWLQJSRLQWRUGHFLPDOIORDWLQJSRLQWQXPEHUV
UHVSHFWLYHO\
7DEOH1XPHULFW\SHV
C# name

.NET name

Purpose

float

System.Single

Whole numbers and a limited range of fractions, with a wide range of values thanks to
floating point. Occupies 32 bits of space.

double

System.Double

Double-precision version of floatsame idea, but using 64 bits.

byte

System.Byte

Non-negative integer. Occupies 8 bits. Represents values from 0 to 255.

sbyte

System.SByte

Signed integer. Occupies 8 bits. Represents values from 128 to 127.

short

System.Int16

Signed integer. Occupies 16 bits. Represents values from 32,768 to 32,767.

ushort

System.UInt16

Non-negative integer. Occupies 16 bits. Represents values from 0 to 65,535.

int

System.Int32

Signed integer. Occupies 32 bits. Represents values from 2,147,483,648 to


2,147,483,647.

uint

System.UInt32

Nonnegative integer. Occupies 32 bits. Represents values from 0 to 4,294,967,295.

long

System.Int64

Signed integer. Occupies 64 bits. Represents values from 9,223,372,036,854,775,808


to 9,223,372,036,854,775,807.

ulong

System.UInt64

Nonnegative integer. Occupies 64 bits. Represents values from 0 to


18,446,744,073,709,551,615.

(none)

System.Numer
ics.BigInteger

Signed integer. Grows in size as required. Value range limited only by available memory.

decimal

System.Decimal

Supports whole numbers and fractions. Slightly less efficient than double, but provides
more predictable behavior when using decimal fractions.

Integers
7KHintW\SH VKRUWIRULQWHJHU UHSUHVHQWVZKROHQXPEHUV7KDWVFOHDUO\QRXVHIRURXU
H[DPSOHEHFDXVHZHUHGHDOLQJZLWKQXPEHUVVXFKDVDQGWKHFORVHVWWKDWDQ
intFDQJHWWRWKDWYDOXHLV%XWSURJUDPVRIWHQGHDOZLWKGLVFUHWHTXDQWLWLHVVXFKDV
WKHQXPEHURIURZVUHWXUQHGE\DGDWDEDVHTXHU\RUWKHQXPEHURIHPSOR\HHVUHSRUWLQJ
WRDSDUWLFXODUPDQDJHU7KHSULQFLSDODGYDQWDJHRIDQLQWHJHUW\SHLVWKDWLWVH[DFW
WKHUHVQRVFRSHIRUZRQGHULQJLIWKHQXPEHULVUHDOO\RUPD\EHMXVWDQXPEHUTXLWH
FORVHWRVXFKDV
7DEOHOLVWVQLQHW\SHVFDSDEOHRIUHSUHVHQWLQJLQWHJHUV7KHQLQWKBigIntegerLVD
VSHFLDOFDVHWKDWZHOOJHWWRODWHU7KHRWKHUHLJKWVXSSRUWIRXUGLIIHUHQWVL]HVZLWKD
FKRLFHEHWZHHQWKHDELOLW\DQGLQDELOLW\WRUHSUHVHQWQHJDWLYHQXPEHUV
8QVLJQHGQXPEHUVPD\VHHPOHVVIOH[LEOHEXWWKH\DUHSRWHQWLDOO\XVHIXOLI\RXQHHG
WRUHSUHVHQWYDOXHVWKDWVKRXOGQHYHUEHQHJDWLYH+RZHYHUWKHXQVLJQHGLQWHJHUW\SHV
DUHQRWZLGHO\XVHGVRPHSURJUDPPLQJODQJXDJHVGRQWVXSSRUWWKHPDWDOODQGVR
\RXOOILQGWKDWWKH1(7)UDPHZRUNFODVVOLEUDU\WHQGVWRXVHWKHVLJQHGW\SHVHYHQ

Variables | 29

ZKHQ WKH XQVLJQHG RQHV PLJKW PDNH PRUH VHQVH )RU H[DPSOH WKH Count SURSHUW\
DYDLODEOHRQPRVWFROOHFWLRQW\SHVLVRIW\SHintDVLJQHGELWLQWHJHUHYHQWKRXJK
LWGRHVQRWPDNHVHQVHIRUDFROOHFWLRQWRFRQWDLQDQHJDWLYHQXPEHURILWHPV
8QVLJQHGLQWHJHUVFDQDOVRUHSUHVHQWODUJHUQXPEHUVWKDQWKHLUVLJQHG
HTXLYDOHQWV7KH\GRQWQHHGWRXVHXSDELWWRUHSUHVHQWWKHVLJQVR
WKH\FDQXVHWKDWWRH[WHQGWKHUDQJHLQVWHDG+RZHYHUWKLVLVVRPHWKLQJ
\RXVKRXOGEHZDU\RIGHSHQGLQJRQ,I\RXUHVRFORVHWRWKHOLPLWVRI
DW\SHVUDQJHWKDWRQHPRUHELWPDNHVDGLIIHUHQFH\RXUHSUREDEO\LQ
GDQJHURIRYHUIORZLQJWKHW\SHVUDQJHLQDQ\FDVHDQGVR\RXVKRXOG
FRQVLGHUDODUJHUW\SH

%HVLGHVWKHVLJQHGXQVLJQHGGLVWLQFWLRQWKHYDULRXVW\SHVRIIHUGLIIHUHQWVL]HVDQGD
FRUUHVSRQGLQJO\GLIIHUHQWUDQJHRIYDOXHVELWVLVDSRSXODUFKRLFHEHFDXVHLWRIIHUV
DXVHIXOO\ZLGHUDQJHRIYDOXHVDQGLVHIILFLHQWIRUDELWSURFHVVRUWRZRUNZLWK
ELWW\SHVDUHXVHGIRUWKH IDLUO\UDUH RFFDVLRQVZKHQ\RXUHGHDOLQJZLWKODUJHHQRXJK
TXDQWLWLHVWKDWDELWUHSUHVHQWDWLRQVUDQJHRIDFRXSOHRIELOOLRQLVLQVXIILFLHQW
ELWYDOXHVDUHUDUHO\XVHGDOWKRXJKWKH\RFFDVLRQDOO\FURSXSZKHQKDYLQJWRGHDOZLWK
ROGSURJUDPPLQJLQWHUIDFHVILOHIRUPDWVRUQHWZRUNSURWRFROV
7KHELWbyteW\SHLVLPSRUWDQWEHFDXVHELQDU\,2 HJZRUNLQJZLWKILOHVRUQHWZRUN
FRQQHFWLRQV LVPRVWO\E\WHRULHQWHG$QGIRUUHDVRQVRIKLVWRULFDOFRQYHQWLRQE\WHV
EXFNWKHWUHQGLQWKDWWKHXQVLJQHGW\SHLVXVHGPRUHZLGHO\WKDQWKHVLJQHGsbyteW\SH
%XWRXWVLGHRI,2DE\WHLVXVXDOO\WRRVPDOOWREHXVHIXO
6RLQSUDFWLFH intLVWKHPRVWZLGHO\XVHGLQWHJHUW\SH7KHIDFWWKDW&HYHQRIIHUV
\RXDOOWKHVHRWKHUFKRLFHVFDQVHHPDOLWWOHDUFKDLFLWKDUNVEDFNWRWKHWLPHZKHQ
FRPSXWHUVKDGVROLWWOHPHPRU\WKDWELWQXPEHUVORRNHGOLNHDQH[SHQVLYHFKRLFH
,WJHWVWKLVIURPLWV&IDPLO\FRQQHFWLRQVEXWLWGRHVWXUQRXWWREHXVHIXOWRKDYHWKLV
FRQWUROZKHQ\RXQHHGWRZRUNGLUHFWO\ZLWK:LQGRZV$3,VDV\RXOOVHHLQ&KDSWHU
1RWLFHWKDWPRVWRIWKHW\SHVLQ7DEOHKDYHWZRQDPHV&XVHVQDPHVVXFKDV
int DQG long EXW WKH 1(7 )UDPHZRUN FDOOV WKHVH W\SHV E\ ORQJHU QDPHV VXFK DV
System.Int32DQGSystem.Int647KHVKRUWHU&QDPHVDUHDOLDVHVDQG&LVKDSS\WR

OHW\RXXVHHLWKHU<RXFDQZULWHWKLV
int answer = 42;

RUWKLV
System.Int32 answer = 42;

RULI\RXU&VRXUFHILOHKDVDusing System;GLUHFWLYHDWWKHWRS\RXFDQZULWHWKLV
Int32 answer = 42;

30 | Chapter 2:Basic Programming Techniques

$OORIWKHVHDUHHTXLYDOHQWWKH\SURGXFHH[DFWO\WKHVDPHFRPSLOHGRXWSXW7KHODVW
WZRDUHHTXLYDOHQWVLPSO\EHFDXVHRIKRZQDPHVSDFHVZRUNEXWZK\GRHV&VXSSRUW
DFRPSOHWHO\GLIIHUHQWVHWRIDOLDVHV"7KHDQVZHULVKLVWRULFDO&ZDVGHVLJQHGWREH
HDV\WROHDUQIRUSHRSOHZKRDUHIDPLOLDUZLWKWKHVRFDOOHG&IDPLO\RIODQJXDJHVZKLFK
LQFOXGHV&&-DYDDQG-DYD6FULSW0RVWRIWKHODQJXDJHVLQWKLVIDPLO\XVHWKHVDPH
QDPHVIRUFHUWDLQNLQGVRIGDWDW\SHVPRVWXVHWKHQDPHintWRGHQRWHDFRQYHQLHQWO\
VL]HGLQWHJHUIRUH[DPSOH6R&LVPHUHO\IROORZLQJVXLWLWDOORZV\RXWRZULWHFRGH
WKDWORRNVOLNHLWZRXOGLQRWKHU&IDPLO\ODQJXDJHV
%\FRQWUDVWWKH1(7)UDPHZRUNVXSSRUWVPDQ\GLIIHUHQWODQJXDJHVVRLWWDNHVWKH
SURVDLFDSSURDFKRIJLYLQJWKHVHQXPHULFGDWDW\SHVGHVFULSWLYHQDPHVLWFDOOVD
ELWLQWHJHUSystem.Int326LQFH&OHWV\RXXVHHLWKHUQDPLQJVW\OHRSLQLRQLVGLYLGHG
RQWKHPDWWHURIZKLFK\RXVKRXOGXVH7KH&IDPLO\VW\OH intdoubleHWF VHHPVWR
EHWKHPRUHSRSXODU
9HUVLRQRIWKH1(7)UDPHZRUNLQWURGXFHVDQH[WUDLQWHJHUW\SHWKDWZRUNVVOLJKWO\
GLIIHUHQWO\IURPWKHUHVW BigInteger,WGRHVQRWKDYHD&VW\OHQDPHVRLWVNQRZQ
RQO\E\LWVFODVVOLEUDU\QDPH8QOLNHDOOWKHRWKHULQWHJHUW\SHVZKLFKRFFXS\DIL[HG
DPRXQWRIPHPRU\WKDWGHWHUPLQHVWKHLUUDQJHDBigIntegerFDQJURZ$VWKHQXPEHU
LWUHSUHVHQWVJHWVODUJHULWVLPSO\FRQVXPHVPRUHVSDFH7KHRQO\WKHRUHWLFDOOLPLWRQ
UDQJHLVWKHDPRXQWRIPHPRU\DYDLODEOHEXWLQSUDFWLFHWKHFRPSXWDWLRQDOFRVWRI
ZRUNLQJZLWKYDVWQXPEHUVLVOLNHO\WREHWKHOLPLWLQJIDFWRU(YHQVLPSOHDULWKPHWLF
RSHUDWLRQVVXFKDVPXOWLSOLFDWLRQFDQEHFRPHUDWKHUH[SHQVLYHZLWKVXIILFLHQWO\YDVW
QXPEHUV)RUH[DPSOHLI\RXKDYHWZRQXPEHUVHDFKZLWKPLOOLRQGHFLPDOGLJLWV
HDFKQXPEHURFFXSLHVPRUHWKDQNLORE\WHVRIPHPRU\PXOWLSO\LQJWKHVHWRJHWKHU
WDNHVPRUHWKDQDPLQXWHRQDUHDVRQDEO\ZHOOVSHFLILHGFRPSXWHUBigIntegerLVXVHIXO
IRUPDWKHPDWLFDOVFHQDULRVZKHQ\RXQHHGWREHDEOHWRZRUNZLWKYHU\ODUJHQXPEHUV
EXWLQPRUHRUGLQDU\VLWXDWLRQVintLVWKHPRVWSRSXODULQWHJHUW\SH
,QWHJHUVDUHDOOYHU\ZHOOIRUFRXQWDEOHTXDQWLWLHVEXWZKDWLI\RXQHHGWKHDELOLW\WR
UHSUHVHQWVRPHWKLQJRWKHUWKDQDZKROHQXPEHU"7KLVLVZKHUHIORDWLQJSRLQWW\SHV
FRPHLQ

Floating point
7KHdoubleDQGfloatW\SHVERWKRIIHUWKHDELOLW\WRVXSSRUWQXPEHUVZLWKDIUDFWLRQDO
FRPSRQHQW)RUH[DPSOH\RXFDQUHSUHVHQWWKHYDOXHZLWKHLWKHURIWKHVHW\SHV
ZKLFK\RXFDQWGRZLWKDQ\RIWKHLQWHJHUW\SHV7KHRQO\GLIIHUHQFHEHWZHHQdouble
DQGfloatLVWKHOHYHORISUHFLVLRQDYDLODEOHVLQFHIORDWLQJSRLQWQXPEHUVKDYHDIL[HG
VL]HWKH\FDQRIIHURQO\DOLPLWHGDPRXQWRISUHFLVLRQ7KLVPHDQVWKDWWKH\FDQQRW
UHSUHVHQWDQ\IUDFWLRQWKHOLPLWHGSUHFLVLRQPHDQVIORDWLQJSRLQWQXPEHUVFDQRQO\
UHSUHVHQWPRVWQXPEHUVDSSUR[LPDWHO\

:KHQHYHUPRUHWKDQRQHZD\RIGRLQJVRPHWKLQJH[LVWVLQDSURJUDPPLQJV\VWHPDVFKLVPLQHYLWDEO\IRUPV
RIIHULQJWKHRSSRUWXQLW\IRUORQJDQGSRLQWOHVVDUJXPHQWVRYHUZKLFKLVEHWWHU

Variables | 31

Floating Point
,I\RXUHZRQGHULQJZK\WKHVHDUHFDOOHGIORDWLQJSRLQWW\SHVWKHQDPHLVDWHFKQLFDO
GHVFULSWLRQRIKRZWKH\ZRUNLQWHUQDOO\7KHVHQXPEHUVFRQWDLQDIL[HGQXPEHURI
ELQDU\GLJLWVWRKROGWKHYDOXHDQGWKHQDQRWKHUQXPEHUWKDWVD\VZKHUHWKH.VKRXOG
JR6RWKHSRLQWLVDELQDU\SRLQWWKHELQDU\HTXLYDOHQWRIDGHFLPDOSRLQW,WVIORDW
LQJEHFDXVHLWFDQPRYHDURXQG

$floatRIIHUVDERXWVHYHQGHFLPDOSODFHVRISUHFLVLRQZKHUHDVDdoubleRIIHUVDERXW
 6WULFWO\ VSHDNLQJ WKH\ RIIHU  DQG  ELQDU\ SODFHV RI SUHFLVLRQ UHVSHFWLYHO\
7KHVHDUHELQDU\IRUPDWVVRWKHLUSUHFLVLRQGRHVQRWFRUUHVSRQGWRDQH[DFWQXPEHU
RIGHFLPDOSODFHVRISUHFLVLRQ 6RWKHIROORZLQJFRGH
double x = 1234.5678;
double y = x + 0.0001;
Console.WriteLine(x);
Console.WriteLine(y);

SULQWVRXWZKDW\RXGH[SHFW
1234.5678
1234.5679

,ILQVWHDGZHXVHWKHIORDWW\SH
float x = 1234.5678f;
float y = x + 0.0001f;
Console.WriteLine(x);
Console.WriteLine(y);

ZHJHWWKLV
1234.568
1234.568

7KLVRIWHQVXUSULVHVQHZGHYHORSHUVEXWLWVQRUPDODQGLVE\QRPHDQVXQLTXHWR&
,IRQO\DOLPLWHGDPRXQWRIVSDFHLVDYDLODEOH\RXVLPSO\FDQQRWUHSUHVHQWDOOSRVVLEOH
QXPEHUVZLWKFRPSOHWHDFFXUDF\)ORDWLQJSRLQWDSSUR[LPDWHDVLWLVLVWKHVWDQGDUG
ZD\WRUHSUHVHQWQRQLQWHJHUQXPEHUVLQPRVWSURJUDPPLQJODQJXDJHVDQG\RXOOVHH
WKLVVRUWRILQDFFXUDF\DQ\ZKHUH

32 | Chapter 2:Basic Programming Techniques

1RWLFHWKDWZKHQPRGLI\LQJWKHFRGHWRXVHfloatLQVWHDGRIdoubleZH
DGGHGWKHOHWWHUIWRWKHHQGRIWKHFRQVWDQWV0.0001fLQVWHDGRIMXVW
0.0001IRUH[DPSOH7KLVLVEHFDXVH&WUHDWVDQXPEHUZLWKDGHFLPDO
SRLQWDVDYDOXHRIW\SH doubleDQGLIZHWU\WRVWRUHWKLVLQDYDULDEOH
RIW\SHfloatZHULVNORVLQJGDWDGXHWRWKHORZHUSUHFLVLRQ6XFKFRGH
LVWUHDWHGDVDQHUURUKHQFHWKHQHHGWRH[SOLFLWO\WHOO&WKDWZHNQRZ
ZHUH ZRUNLQJ ZLWK VLQJOHSUHFLVLRQ IORDWLQJSRLQW YDOXHV ZLWK WKH I
VXIIL[,I\RXKDYHD double\RXUHDOO\ZRXOGOLNHWRWXUQLQWRD float
DQG\RXDUHSUHSDUHGWRWROHUDWHWKHORVVRISUHFLVLRQ\RXFDQWHOO&
WKLVZLWKDFDVWRSHUDWRU)RUH[DPSOH
double x = 1234.5678;
double y = x + 0.0001;
float impreciseSum = (float) (x + y);

7KH(float)V\QWD[KHUHLVDFDVWDQH[SOLFLWLQVWUXFWLRQWRWKHFRPSLOHU
WKDWZHZDQWWRFRQYHUWWKHW\SH6LQFHZHDUHEHLQJH[SOLFLWWKHFRP
SLOHUGRHVQRWWUHDWWKLVDVDQHUURU

)RUDORWRIDSSOLFDWLRQVOLPLWHGSUHFLVLRQLVQRWWRRELJDSUREOHPDVORQJDV\RXUH
DZDUHRILWEXWWKHUHVDVOLJKWO\VXEWOHUSUREOHPWKDWDIIOLFWV doubleDQG float7KH\
DUHERWKELQDU\UHSUHVHQWDWLRQVEHFDXVHWKDWVWKHPRVWHIILFLHQWZD\RISDFNLQJSUH
FLVLRQLQWRWKHVSDFHDYDLODEOH+RZHYHULWPHDQVWKDW\RXFDQJHWVRPHVXUSULVLQJ
ORRNLQJUHVXOWVZKHQZRUNLQJLQGHFLPDO)RUH[DPSOHWKHQXPEHUFDQQRWEHUHS
UHVHQWHGDFFXUDWHO\DVDILQLWHOHQJWKELQDU\IUDFWLRQ )RUPXFKWKHVDPHUHDVRQWKDW
FDQQRWDFFXUDWHO\EHUHSUHVHQWHGDVDILQLWHOHQJWKGHFLPDOIUDFWLRQ,QHLWKHUFDVH
\RXHQGXSZLWKDUHFXUULQJ>LHLQILQLWHO\ORQJ@QXPEHULQGHFLPDOLV
UHFXUULQJLQGHFLPDOLVEXWLQELQDU\LWVUHFXUULQJ
7DNHWKHIROORZLQJH[DPSOH
float f1 = 0.1f;
float f2 = f1 + 0.1f;
float f3 = f2 + 0.1f;
float f4 = f3 + 0.1f;
float f5 = f4 + 0.1f;
float f6 = f5 + 0.1f;
float f7 = f6 + 0.1f;
float f8 = f7 + 0.1f;
float f9 = f8 + 0.1f;
Console.WriteLine(f1);
Console.WriteLine(f2);
Console.WriteLine(f3);
Console.WriteLine(f4);
Console.WriteLine(f5);
Console.WriteLine(f6);
Console.WriteLine(f7);
Console.WriteLine(f8);
Console.WriteLine(f9);

Variables | 33

:HOOVHHKRZWRDYRLGVXFKKLJKO\UHSHWLWLYHFRGHZKHQZHJHWWRORRSVODWHULQWKH
FKDSWHUE\WKHZD\ 7KLVVKRZVWKHIROORZLQJUDWKHUVXVSHFWRXWSXW
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8000001
0.9000001

7KHLQDELOLW\WRUHSUHVHQWDFFXUDWHO\LVQRWLQLWLDOO\REYLRXVEHFDXVH1(7URXQGV
WKHQXPEHUVZKHQGLVSOD\LQJWKHPPDVNLQJWKHSUREOHP+RZHYHUDVZHNHHSDGGLQJ
QXPEHUVWRJHWKHUWKHLQDFFXUDFLHVDGGXSDQGHYHQWXDOO\VWDUWWREHFRPHYLVLEOH$V
\RXFDQLPDJLQHDFFRXQWDQWVGRQWOLNHWKLVVRUWRIWKLQJLIWKRVHQXPEHUVKDSSHQHG
WRUHSUHVHQWIXQGWUDQVIHUVPHDVXUHGLQELOOLRQVRIGROODUVKDYLQJELOOLRQ
 VXGGHQO\DSSHDURXWRIQRZKHUHHYHU\HLJKWWUDQVDFWLRQVZRXOGEHFRQVLGHUHG
DEDGSUDFWLFH7KLVLVZK\WKHUHVDVSHFLDOQXPHULFW\SHMXVWIRUZRUNLQJLQGHFLPDO

Decimal floating point


7KH decimalW\SH RU System.DecimalDV1(7FDOOVLW LVVXSHUILFLDOO\YHU\VLPLODUWR
doubleDQGfloatH[FHSWLWVLQWHUQDOUHSUHVHQWDWLRQLVDGDSWHGWRGHFLPDOUHSUHVHQWD
WLRQV,WFDQUHSUHVHQWXSWRGHFLPDOGLJLWVRISUHFLVLRQDQGXQOLNHWKHWZRELQDU\
IORDWLQJSRLQWW\SHVDQ\QXPEHUWKDWFDQEHZULWWHQDVDGLJLW RUIHZHU GHFLPDO
FDQEHUHSUHVHQWHGFRPSOHWHO\DFFXUDWHO\DVDdecimalYDULDEOH7KHYDOXHILWVFRP
IRUWDEO\LQWRGLJLWVZLWKURRPWRVSDUHVRWKLVZRXOGIL[WKHSUREOHPLQWKHSUHYLRXV
H[DPSOH7KHdecimalW\SHVWLOOKDVOLPLWHGSUHFLVLRQLWMXVWKDVOHVVVXUSULVLQJEHKDYLRU
LI\RXUHORRNLQJDWDOO\RXUQXPEHUVLQGHFLPDO
6RLI\RXDUHSHUIRUPLQJFDOFXODWLRQVLQYROYLQJPRQH\decimalLVOLNHO\WREHDEHWWHU
FKRLFHWKDQdoubleRUfloat7KHWUDGHRIILVWKDWLWVVOLJKWO\OHVVHIILFLHQWFRPSXWHUV
DUHPRUHDWKRPHLQELQDU\WKDQGHFLPDO)RURXUUDFHLQIRUPDWLRQDSSOLFDWLRQZH
GRQW KDYH DQ\ SDUWLFXODU QHHG IRU GHFLPDO ILGHOLW\ ZKLFK LV ZK\ ZHUH XVLQJ WKH
doubleW\SHLQ([DPSOH
*HWWLQJEDFNWRWKDWH[DPSOHUHFDOOWKDWZHGHILQHGWKUHHYDULDEOHVWKDWKROGWKHGLV
WDQFHRXUFDUKDVWUDYHOHGKRZORQJLWWRRNDQGKRZPXFKIXHOLWEXUQHGLQWKHSURFHVV
+HUHLWLVDJDLQVRWKDW\RXGRQWKDYHWRIOLSEDFNWRLW
static void Main(string[] args)
{
double kmTravelled = 5.141;
double elapsedSeconds = 78.738;
double fuelKilosConsumed = 2.7;
}

34 | Chapter 2:Basic Programming Techniques

1RZWKDWZHYHORRNHGDWWKHQXPHULFW\SHVWKHVWUXFWXUHRIWKHVHOLQHVLVSUHWW\FOHDU
:HVWDUWZLWKWKHW\SHRIGDWDZHGOLNHWRZRUNZLWKIROORZHGE\WKHQDPHZHGOLNH
WRXVHDQGWKHQZHXVHWKH =V\PEROWRDVVLJQDYDOXHWRWKHYDULDEOH%XWDVVLJQLQJ
FRQVWDQWYDOXHVLVQWYHU\H[FLWLQJ<RXFDQJHWWKHFRPSXWHUWRGRPRUHXVHIXOZRUN
EHFDXVH\RXFDQDVVLJQDQH[SUHVVLRQLQWRDYDULDEOH

Expressions and Statements


$QH[SUHVVLRQLVDSLHFHRIFRGHWKDWSURGXFHVDYDOXHRIVRPHNLQG:HYHDFWXDOO\
VHHQVHYHUDOH[DPSOHVDOUHDG\WKHPRVWEDVLFEHLQJWKHQXPEHUVZHUHDVVLJQLQJLQWR
WKHYDULDEOHV6RLQRXUH[DPSOHDQXPEHUVXFKDV
5.141

LVDQH[SUHVVLRQ([SUHVVLRQVZKHUHZHMXVWWHOO&ZKDWYDOXHZHZDQWDUHFDOOHG
OLWHUDOH[SUHVVLRQV0RUHLQWHUHVWLQJO\H[SUHVVLRQVFDQSHUIRUPFDOFXODWLRQV)RUH[
DPSOHZHFRXOGFDOFXODWHWKHGLVWDQFHWUDYHOHGSHUNLORJUDPRIIXHOFRQVXPHGZLWKWKH
H[SUHVVLRQLQ([DPSOH
([DPSOH'LYLGLQJRQHYDULDEOHE\DQRWKHU
kmTravelled / fuelKilosConsumed

7KH/V\PEROGHQRWHVGLYLVLRQ0XOWLSOLFDWLRQDGGLWLRQDQGVXEWUDFWLRQDUHGRQHZLWK
*+DQG-UHVSHFWLYHO\
<RXFDQFRPELQHH[SUHVVLRQVWRJHWKHUWRR7KH /RSHUDWRUUHTXLUHVWZRLQSXWVWKH
GLYLGHQGDQGWKHGLYLVRUDQGHDFKLQSXWLVLWVHOIDQH[SUHVVLRQ:HZHUHDEOHWRXVH
YDULDEOHQDPHVVXFKDVkmTravelledEHFDXVHDYDULDEOHQDPHLVYDOLGDVDQH[SUHVVLRQ
WKHUHVXOWDQWYDOXHLVMXVWZKDWHYHUWKDWYDULDEOHVYDOXHLV%XWZHFRXOGXVHOLWHUDOVDV
([DPSOHVKRZV $WUDSDZDLWVWKHXQZDU\KHUHVHHWKHVLGHEDURQWKHQH[WSDJH
([DPSOH'LYLGLQJRQHOLWHUDOE\DQRWKHU
60 / 10

2UZHFRXOGXVHDPL[WXUHRIOLWHUDOVDQGYDULDEOHQDPHVWRFDOFXODWHWKHHODSVHGWLPH
LQPLQXWHV
elapsedSeconds / 60

RUDPXOWLSOLFDWLRQH[SUHVVLRQDVRQHRIWKHLQSXWVWRDGLYLVLRQH[SUHVVLRQWRFDOFXODWH
WKHHODSVHGWLPHLQKRXUV
elapsedSeconds / (60 * 60)

Expressions and Statements | 35

Integer Versus Floating-Point Division


7KHUHVDVXEWOHGLIIHUHQFHEHWZHHQKRZGLYLVLRQZRUNVLQ([DPSOHVDQG6LQFH
WKHWZROLWHUDOVLQ([DPSOHGRQRWFRQWDLQGHFLPDOSRLQWVWKHFRPSLOHUWUHDWVWKHP
DVLQWHJHUVDQGVRLWZLOOSHUIRUPDQLQWHJHUGLYLVLRQ%XWVLQFHWKH kmTravelledDQG
fuelKilosConsumedYDULDEOHVDUHERWKIORDWLQJSRLQWLWZLOOXVHDIORDWLQJSRLQWGLYLVLRQ
RSHUDWLRQ,QWKLVSDUWLFXODUFDVHLWGRHVQWPDWWHUEHFDXVHGLYLGLQJE\SURGXFHV
DQRWKHULQWHJHU%XWZKDWLIWKHUHVXOWKDGQRWEHHQDZKROHQXPEHU",IZHKDGZULWWHQ
WKLVIRUH[DPSOH
3/4

WKHUHVXOWZRXOGEHDVWKLVLVDQLQWHJHUGLYLVLRQGRHVQRWJRLQWR+RZHYHU
JLYHQWKHIROORZLQJ
double x = 3;
double y = 4;

WKHYDOXHRIx/yZRXOGEH0.75EHFDXVH&ZRXOGXVHIORDWLQJSRLQWGLYLVLRQZKLFK
FDQGHDOZLWKQRQZKROHUHVXOWV,I\RXZDQWHGWRXVHIORDWLQJSRLQWFDOFXODWLRQVZLWK
OLWHUDOV\RXFRXOGZULWH
3.0/4.0

7KHGHFLPDOSRLQWLQGLFDWHVWKDWZHZDQWIORDWLQJSRLQWQXPEHUVDQGWKHUHIRUHIORDW
LQJSRLQWGLYLVLRQVRWKHUHVXOWLV

7KHSDUHQWKHVHVHQVXUHWKDWZHGLYLGHE\ :LWKRXWWKHSDUHQWKHVHVWKLVH[
SUHVVLRQZRXOGGLYLGHE\DQGWKHQPXOWLSO\E\ZKLFKZRXOGEHOHVVXVHIXO6HH
WKHVLGHEDURQWKHQH[WSDJH $QGWKHQZHFRXOGXVHWKLVWRZRUNRXWWKHVSHHGLQ
NLORPHWHUVSHUKRXU
kmTravelled / (elapsedSeconds / (60 * 60))

([SUHVVLRQVGRQWDFWXDOO\GRDQ\WKLQJRQWKHLURZQ:HKDYHGHVFULEHGDFDOFXODWLRQ
EXWWKH&FRPSLOHUQHHGVWRNQRZZKDWZHZDQWWRGRZLWKWKHUHVXOW:HFDQGR
YDULRXVWKLQJVZLWKDQH[SUHVVLRQ:HFRXOGXVHLWWRLQLWLDOL]HDQRWKHUYDULDEOH
double kmPerHour = kmTravelled / (elapsedSeconds / (60 * 60));

RUZHFRXOGGLVSOD\WKHYDOXHRIWKHH[SUHVVLRQLQWKHFRQVROHZLQGRZ
Console.WriteLine(kmTravelled / (elapsedSeconds / (60 * 60)));

%RWKRIWKHVHDUHH[DPSOHVRIVWDWHPHQWV
:KHUHDVDQH[SUHVVLRQGHVFULEHVDFDOFXODWLRQDVWDWHPHQWGHVFULEHVDQDFWLRQ,QWKH
ODVWWZRH[DPSOHVZHXVHGWKHVDPHH[SUHVVLRQDFDOFXODWLRQRIWKHUDFHFDUVVSHHG
EXWWKHWZRVWDWHPHQWVGLGGLIIHUHQWWKLQJVRQHHYDOXDWHGWKHH[SUHVVLRQDQGDVVLJQHG
LWLQWRDQHZYDULDEOHZKLOHWKHRWKHUHYDOXDWHGWKHH[SUHVVLRQDQGWKHQSDVVHGLWWR
WKHConsoleFODVVVWriteLinePHWKRG

36 | Chapter 2:Basic Programming Techniques

Order of Evaluation
&KDVDVHWRIUXOHVIRUZRUNLQJRXWWKHRUGHULQZKLFKWRHYDOXDWHWKHFRPSRQHQWVRI
DQH[SUHVVLRQ,WGRHVQRWQHFHVVDULO\ZRUNIURPOHIWWRULJKWEHFDXVHVRPHRSHUDWRUV
KDYHDKLJKHUSUHFHGHQFHWKDQRWKHUV)RUH[DPSOHLPDJLQHHYDOXDWLQJWKLV

IURPOHIWWRULJKW6WDUWZLWKDGGZKLFKJHWV\RXWRDQGWKHQGLYLGHE\
WKHUHVXOWZRXOGEH%XWWKHFRQYHQWLRQDOUXOHVRIDULWKPHWLFPHDQWKHUHVXOWVKRXOG
EHRQHDQGWKUHHTXDUWHUV$QGWKDWVMXVWZKDW&SURGXFHVWKHUHVXOWLV7KH
GLYLVLRQLVSHUIRUPHGEHIRUHWKHDGGLWLRQEHFDXVHGLYLVLRQKDVKLJKHUSUHFHGHQFHWKDQ
GLYLVLRQ
6RPH JURXSV RI RSHUDWRUV KDYH HTXDO SUHFHGHQFH )RU H[DPSOH PXOWLSOLFDWLRQ DQG
GLYLVLRQKDYHHTXDOSUHFHGHQFH:KHQH[SUHVVLRQVFRQWDLQPXOWLSOHRSHUDWLRQVZLWK
WKHVDPHSUHFHGHQFHPDWKHPDWLFDORSHUDWLRQVDUHHYDOXDWHGIURPOHIWWRULJKW6R
 HYDOXDWHVWR%XWSDUHQWKHVHVWUXPSSUHFHGHQFHVR  
HYDOXDWHVWR
6RPHSURJUDPPLQJERRNVJRLQWRJUHDWGHSWKVDERXWDOOWKHGHWDLOVRISUHFHGHQFHEXW
LWPDNHVIRUH[FHSWLRQDOO\WHGLRXVUHDGLQJ&KDVGLIIHUHQWOHYHOVRISUHFHGHQFH
7KHGHWDLOVDUHLPSRUWDQWIRUFRPSLOHUZULWHUVEXWRIOLPLWHGYDOXHIRUGHYHORSHUV
FRGHWKDWUHOLHVKHDYLO\RQSUHFHGHQFHFDQEHKDUGWRUHDG8VLQJSDUHQWKHVHVWRPDNH
HYDOXDWLRQRUGHUH[SOLFLWFDQRIWHQLPSURYHFODULW\%XWLI\RXZRXOGOLNHWKHJRU\GHWDLOV
\RXFDQILQGWKHPDWKWWSPVGQPLFURVRIWFRPHQXVOLEUDU\DD

$QH[SUHVVLRQVW\SHPDWWHUV7KHH[DPSOHVZHMXVWORRNHGDWLQYROYH
QXPEHUVRUQXPHULFYDULDEOHVDQGDUHRIW\SHdoubleRUint([SUHVVLRQV
FDQEHRIDQ\W\SHWKRXJK)RUH[DPSOH("Hello, " + "world")LVDQ
H[SUHVVLRQRIW\SH string,I\RXZURWHDQDVVLJQPHQWVWDWHPHQWWKDW
WULHGWRDVVLJQWKDWH[SUHVVLRQLQWRDYDULDEOHRIW\SHdoubleWKHFRPSLOHU
ZRXOGFRPSODLQLWLQVLVWVWKDWH[SUHVVLRQVDUHHLWKHURIWKHVDPHW\SH
DVWKHYDULDEOHRURIDW\SHWKDWLVLPSOLFLWO\FRQYHUWLEOHWRWKHYDULDEOHV
W\SH
,PSOLFLWFRQYHUVLRQVH[LVWIRUQXPHULFW\SHVZKHQWKHFRQYHUVLRQZRQW
ORVHLQIRUPDWLRQIRUH[DPSOHD doubleFDQUHSUHVHQWDQ\YDOXHWKDW
DQ int FDQ VR \RXUH DOORZHG WR DVVLJQ DQ LQWHJHU H[SUHVVLRQ LQWR D
doubleYDULDEOH%XWDWWHPSWLQJWKHRSSRVLWHZRXOGFDXVHDFRPSLOHU
HUURUEHFDXVHGRXEOHVFDQEHODUJHUWKDQWKHKLJKHVWintDQGWKH\FDQ
DOVRFRQWDLQIUDFWLRQDOSDUWVWKDWZRXOGEHORVW,I\RXGRQWPLQGWKH
ORVVRILQIRUPDWLRQ\RXFDQSXWDFDVWLQIURQWRIWKHH[SUHVVLRQ
int approxKmPerHour = (int) kmPerHour;

7KLVFDVWVWKH kmPerHour ZKLFKZHGHFODUHGHDUOLHUDVD double WRDQ


int PHDQLQJ LWOO IRUFH WKH YDOXH WR ILW LQ DQ LQWHJHU SRVVLEO\ ORVLQJ
LQIRUPDWLRQLQWKHSURFHVV

Expressions and Statements | 37

$YDULDEOHGRHVQWKDYHWREHVWXFNZLWKLWVLQLWLDOYDOXHIRULWVZKROHOLIH:HFDQDVVLJQ
QHZYDOXHVDWDQ\WLPH

Assignment Statements
7KHSUHYLRXVVHFWLRQVKRZHGKRZWRDVVLJQDQH[SUHVVLRQVYDOXHLQWRDQHZO\GHFODUHG
YDULDEOH
double kmPerHour = kmTravelled / (elapsedSeconds / (60 * 60));

,IDWVRPHODWHUVWDJHLQWKHSURJUDPVH[HFXWLRQQHZLQIRUPDWLRQEHFRPHVDYDLODEOH
ZHFRXOGDVVLJQDQHZYDOXHLQWRWKHkmPerHourYDULDEOHDVVLJQPHQWVWDWHPHQWVDUHQW
UHTXLUHGWRGHFODUHQHZYDULDEOHVDQGFDQDVVLJQLQWRH[LVWLQJRQHV
kmPerHour = updateKmTravelled / (updatedElapsedSeconds / (60 * 60));

7KLVRYHUZULWHVWKHH[LVWLQJYDOXHLQWKHkmPerHourYDULDEOH
&RIIHUVVRPHVSHFLDOL]HGDVVLJQPHQWVWDWHPHQWVWKDWFDQPDNHIRUVOLJKWO\PRUHVXF
FLQFWFRGH)RUH[DPSOHVXSSRVH\RXZDQWHGWRDGGWKHFDUVODWHVWODSWLPHWRWKH
YDULDEOHKROGLQJWKHWRWDOHODSVHGWLPH<RXFRXOGZULWHWKLV
elapsedSeconds = elapsedSeconds + latestLapTime;

7KLVHYDOXDWHVWKHH[SUHVVLRQRQWKHULJKWKDQGVLGHDQGDVVLJQVWKHUHVXOWWRWKHYDUL
DEOHVSHFLILHGRQWKHOHIWKDQGVLGH+RZHYHUWKLVSURFHVVRIDGGLQJDYDOXHWRDYDULDEOH
LVVRFRPPRQWKDWWKHUHVDVSHFLDOV\QWD[IRULW
elapsedSeconds += latestLapTime;

7KLVKDVH[DFWO\WKHVDPHHIIHFWDVWKHSUHYLRXVH[SUHVVLRQ7KHUHDUHHTXLYDOHQWVIRU
WKHRWKHUPDWKHPDWLFDORSHUDWRUVVR-=PHDQVWRVXEWUDFWWKHH[SUHVVLRQRQWKHULJKW
IURPWKHYDULDEOHRQWKHOHIW*=GRHVWKHVDPHIRUPXOWLSOLFDWLRQDQGVRRQ

Increment and Decrement Operators


:KLOHZHUHORRNLQJDWKRZWRXSGDWHYDOXHVZHVKRXOGDOVRORRNDWWKHLQFUHPHQWDQG
GHFUHPHQWRSHUDWRUV,IZHZDQWWRPDLQWDLQDODSFRXQWZHFRXOGDGGRQHHDFKWLPH
WKHFDUFRPSOHWHVDODS
lapCount += 1;

7KH&SURJUDPPLQJODQJXDJHVGHVLJQHUVFRQVLGHUHGDGGLQJRQHWREHDVXIILFLHQWO\
LPSRUWDQWFDVHWRGHYLVHDQHYHQPRUHVSHFLDOV\QWD[IRULWFDOOHGWKHLQFUHPHQWRSHU
DWRUZKLFK&GXO\RIIHUV
lapCount++;

7KHUHVDOVRDGHFUHPHQWRSHUDWRU --ZKLFKVXEWUDFWVRQH7KLVH[DPSOHLVDVWDWH
PHQWEXW\RXFDQDOVRXVHWKHLQFUHPHQWDQGGHFUHPHQWRSHUDWRUVLQWKHPLGGOHRIDQ
H[SUHVVLRQ
int currentLap = lapCount++;

38 | Chapter 2:Basic Programming Techniques

%XWEHFDUHIXO7KHH[SUHVVLRQRQWKHULJKWRIWKLVDVVLJQPHQWVWDWHPHQWPHDQVHYDO
XDWHWKHFXUUHQWYDOXHRIlapCountDQGWKHQLQFUHPHQWlapCountDIWHUJHWWLQJLWVFXUUHQW
YDOXH6RLI lapCountZDVEHIRUHH[HFXWLQJWKLVVWDWHPHQW currentLapZRXOGEH
DQGlapCountZRXOGEHDIWHUH[HFXWLQJLW,I\RXZDQWWRXVHWKHXSGDWHGYDOXH\RX
SXWWKHLQFUHPHQW RUGHFUHPHQW RSHUDWRUEHIRUHLWVWDUJHW
int currentLap = ++lapCount;

<RXFRXOGZULWHDSURJUDPWKDWFRQVLVWHGHQWLUHO\RIYDULDEOHGHFODUDWLRQDVVLJQPHQW
LQFUHPHQWDQGPHWKRGLQYRFDWLRQVWDWHPHQWV+RZHYHUVXFKDSURJUDPZRXOGQWEH
YHU\LQWHUHVWLQJLWZRXOGDOZD\VH[HFXWHWKHVDPHVHTXHQFHRIVWDWHPHQWVMXVWRQFH
LQWKHVDPHRUGHU)RUWXQDWHO\&SURYLGHVVRPHPRUHLQWHUHVWLQJVWDWHPHQWVWKDW
DOORZ D SURJUDP WR PDNH GHFLVLRQV WKDW G\QDPLFDOO\ FKDQJH WKH IORZ RI H[HFXWLRQ
WKURXJKWKHFRGH7KLVLVVRPHWLPHVUHIHUUHGWRDVIORZFRQWURO

Flow Control with Selection Statements


$VHOHFWLRQVWDWHPHQWVHOHFWVZKLFKFRGHSDWKWRH[HFXWHQH[WEDVHGRQWKHYDOXHRI
DQH[SUHVVLRQ:HFRXOGXVHDVHOHFWLRQVWDWHPHQWWRZRUNRXWZKHWKHUWKHUDFHFDULV
OLNHO\WRUXQRXWRIIXHOLQWKHQH[WIHZODSVDQGGLVSOD\DZDUQLQJLILWLV&RIIHUV
WZRVHOHFWLRQVWDWHPHQWVifVWDWHPHQWVDQGswitchVWDWHPHQWV
7RLOOXVWUDWHVHOHFWLRQLQDFWLRQZHQHHGWRPDNHDVOLJKWFKDQJHWRWKHSURJUDP5LJKW
QRZRXUH[DPSOHKDUGFRGHVDOORILWVGDWDWKHGLVWDQFHWUDYHOHGIXHOFRQVXPHGDQG
WLPHHODSVHGDUHFRPSLOHGLQWRWKHFRGHDVOLWHUDOV7KLVPDNHVVHOHFWLRQVWDWHPHQWV
XQLQWHUHVWLQJWKHSURJUDPZRXOGPDNHWKHVDPHGHFLVLRQHYHU\WLPHEHFDXVHWKHGDWD
ZRXOGDOZD\VEHWKHVDPH)RUWKHGHFLVLRQWREHPHDQLQJIXOZHQHHGWRPRGLI\WKH
SURJUDPWRDFFHSWLQSXW6LQFHZHUHZULWLQJDFRQVROHDSSOLFDWLRQZHFDQVXSSO\WKH
QHFHVVDU\LQIRUPDWLRQDVFRPPDQGOLQHDUJXPHQWV:HFRXOGUXQWKHSURJUDPSDVVLQJ
LQWKHWRWDOGLVWDQFHHODSVHGWLPHDQGIXHOFRQVXPHGIRUH[DPSOH
RaceInfo 20.6 312.8 10.8

:HFDQZULWHDPRGLILHGYHUVLRQRIWKHSURJUDPWKDWSLFNVXSWKHVHFRPPDQGOLQH
YDOXHVLQVWHDGRIKDUGFRGLQJWKHPDVVKRZQLQ([DPSOH
([DPSOH5HDGLQJFRPPDQGOLQHLQSXWV
static void Main(string[] args)
{
double kmTravelled = double.Parse(args[0]);
double elapsedSeconds = double.Parse(args[1]);
double fuelKilosConsumed = double.Parse(args[2]);
}

7KHUHDUHDIHZLQWHUHVWLQJIHDWXUHVWRSRLQWRXWKHUHEHIRUHZHDGGDVHOHFWLRQVWDWH
PHQW )LUVW UHFDOO IURP HDUOLHU WKDW WKH Main PHWKRG RXU SURJUDPV HQWU\ SRLQW LV
SDVVHGDVHTXHQFHRIVWULQJVUHSUHVHQWLQJWKHFRPPDQGOLQHDUJXPHQWVLQDYDULDEOH
FDOOHGargs7KLVVHTXHQFHLVDQDUUD\D1(7FRQVWUXFWIRUKROGLQJPXOWLSOHLWHPVRI
Flow Control with Selection Statements | 39

DSDUWLFXODUW\SH <RXFDQPDNHDUUD\VRIDQ\WKLQJQXPEHUVWH[WRUDQ\W\SH7KH
string[]V\QWD[LQGLFDWHVWKDWWKLVPHWKRGH[SHFWVDQDUUD\RIVWULQJV ,QDQH[SUHVVLRQ
ZHFDQUHWULHYHDSDUWLFXODULWHPIURPDQDUUD\E\VSHFLI\LQJDQXPEHULQVTXDUHEUDFNHWV
DIWHUWKHDUUD\YDULDEOHVQDPH6RWKHILUVWWKUHHOLQHVLQRXUPHWKRGKHUHXVHargs[0]
args[1]DQG args[2]WRJHWWKHILUVWVHFRQGDQGWKLUGLWHPVLQWKHDUUD\WKHWKUHH
FRPPDQGOLQHDUJXPHQWVLQWKLVFDVH
&IDPLO\ODQJXDJHVWHQGWRQXPEHUWKLQJVIURP]HURDQG&IROORZV
VXLW7KLVPD\VHHPDOLWWOHLGLRV\QFUDWLFEXWLWPDNHVVHQVHWRWKHFRP
SXWHU<RXFDQWKLQNRILWDVVD\LQJKRZIDULQWRWKHDUUD\\RXZDQWWR
ORRN,I\RXZDQWWRORRNDWWKHWKLQJULJKWDWWKHVWDUWRIWKHDUUD\\RX
GRQWQHHGWRJRDQ\GLVWDQFHDWDOOVRDQRIIVHWRI]HURJHWV\RXWKHILUVW
LWHP ,I \RXUH %ULWLVK \RXOO UHFRJQL]H WKLV ORJLF IURP IORRU
QXPEHULQJWKHILUVWIORRULQDEXLOGLQJLQ*UHDW%ULWDLQLVQRWWKHRQH
DWVWUHHWOHYHO\RXKDYHWRJRXSRQHIOLJKWRIVWDLUVWRJHWWRWKHILUVWIORRU

$OVRQRWLFHWKHXVHRIdouble.Parse&RPPDQGOLQHDUJXPHQWVDUHSDVVHGDVWH[WEH
FDXVHWKHXVHUFDQW\SHDQ\WKLQJ
RaceInfo Jenson Button Rocks

%XWRXUSURJUDPH[SHFWVQXPEHUV:HQHHGWRGRVRPHWKLQJWRFRQYHUWWKHVWULQJV
LQWRQXPEHUVDQGWKDWVZKDWdouble.ParseGRHVLWH[SHFWVWKHWH[WWRFRQWDLQDGHF
LPDOQXPEHUDQGFRQYHUWVLWLQWRDGRXEOHSUHFLVLRQIORDWLQJSRLQWUHSUHVHQWDWLRQRI
WKDWQXPEHU ,I\RXUHZRQGHULQJZKDWLWZRXOGGRLIWKHWH[WZDVQWLQIDFWDQXPEHU
LWOOWKURZDQH[FHSWLRQ&KDSWHUH[SODLQVZKDWWKDWPHDQVDQGKRZWRGHDOZLWKLW
JUDFHIXOO\EXWIRUQRZLWPHDQVRXUSURJUDPZRXOGFUDVKZLWKDQHUURU
7KLV H[DPSOH LOOXVWUDWHV WKDW PHWKRG LQYRFDWLRQV FDQ DOVR EH H[SUHVVLRQVWKH
doubleW\SHV ParsePHWKRGUHWXUQVDYDOXHRIW\SH doublePHDQLQJZHFDQXVHLWWR
LQLWLDOL]HDYDULDEOHRIW\SHdouble
%XWWKDWVDOOE\WKHE\WKHSRLQWKHUHLVWKDWRXUSURJUDPQRZJHWVGDWDWKDWFRXOG
EHGLIIHUHQWHDFKWLPHWKHSURJUDPUXQV)RUH[DPSOHDUDFHHQJLQHHULQWKHSLWODQH
FRXOGUXQWKHSURJUDPZLWKQHZGLVWDQFHWLPLQJDQGIXHOLQIRUPDWLRQHDFKWLPHWKH
FDUFRPSOHWHVDODS6RRXUSURJUDPFDQQRZXVHIXOO\PDNHGHFLVLRQVEDVHGRQLWVLQSXW
XVLQJVHOHFWLRQVWDWHPHQWV2QHVXFKVWDWHPHQWLVWKHifVWDWHPHQW

if Statements
$Q ifVWDWHPHQWLVDVHOHFWLRQVWDWHPHQWWKDWGHFLGHVZKHWKHUWRH[HFXWHDSDUWLFXODU
SLHFHRIFRGHEDVHGRQWKHYDOXHRIDQH[SUHVVLRQ:HFDQXVHWKLVWRVKRZDORZIXHO
ZDUQLQJE\DGGLQJWKHFRGHLQ([DPSOHDWWKHHQGRIRXUH[DPSOHVMainPHWKRG
0RVWRIWKHFRGHSHUIRUPVFDOFXODWLRQVLQSUHSDUDWLRQIRUPDNLQJWKHGHFLVLRQ7KH
ifVWDWHPHQWWRZDUGWKHHQGRIWKHH[DPSOHPDNHVWKHGHFLVLRQLWGHFLGHVZKHWKHU
WRH[HFXWHWKHEORFNRIFRGHHQFORVHGLQEUDFHV

40 | Chapter 2:Basic Programming Techniques

([DPSOHLIVWDWHPHQW
double fuelTankCapacityKilos = 80;
double lapLength = 5.141;
double
double
double
double

fuelKilosPerKm = fuelKilosConsumed / kmTravelled;


fuelKilosRemaining = fuelTankCapacityKilos - fuelKilosConsumed;
predictedDistanceUntilOutOfFuel = fuelKilosRemaining / fuelKilosPerKm;
predictedLapsUntilOutOfFuel =
predictedDistanceUntilOutOfFuel / lapLength;

if (predictedLapsUntilOutOfFuel < 4)
{
Console.WriteLine("Low on fuel. Laps remaining: " +
predictedLapsUntilOutOfFuel);
}

7RWHVWWKLVZHQHHGWRUXQWKHSURJUDPZLWKFRPPDQGOLQHDUJXPHQWV<RXFRXOG
RSHQDFRPPDQGSURPSWPRYHWRWKHGLUHFWRU\FRQWDLQLQJWKHEXLOWRXWSXWRI\RXU
SURMHFWDQGUXQLWZLWKWKHDUJXPHQWV\RXZDQW ,WOOEHLQWKHELQ?'HEXJIROGHUWKDW
9LVXDO6WXGLRFUHDWHVLQVLGH\RXUSURMHFWVIROGHU 2U\RXFDQJHW9LVXDO6WXGLRWRSDVV
DUJXPHQWVIRU\RX7RGRWKDWJRWRWKH6ROXWLRQ([SORUHUSDQHODQGGRXEOHFOLFNRQ
WKH3URSHUWLHVLFRQ7KLVZLOORSHQWKHSURMHFWVSURSHUWLHVYLHZZKLFKKDVDVHULHVRI
WDEVRQWKHOHIWKDQGVLGH6HOHFWWKH'HEXJWDEDQGLQWKHPLGGOH\RXOOVHHD&RP
PDQGOLQHDUJXPHQWVWH[WER[DVVKRZQLQ)LJXUH

)LJXUH3DVVLQJFRPPDQGOLQHDUJXPHQWVLQ9LVXDO6WXGLR

,I\RXUXQWKHSURJUDPZLWKDUJXPHQWVFRUUHVSRQGLQJWRMXVWDIHZODSV HJ 15 238


8  LW ZRQW SULQW DQ\WKLQJ %XW WU\ UXQQLQJ LW ZLWK WKH IROORZLQJ DUJXPHQWV 141.95
2156.2 75.6,WOOSUHGLFWWKDWWKHFDUKDVDERXWODSVRIIXHOUHPDLQLQJ7KHifVWDWH
PHQWLQ([DPSOHWHVWVWKHIROORZLQJH[SUHVVLRQ
predictedLapsUntilOutOfFuel < 4

7KH<V\PEROPHDQVOHVVWKDQ6RWKHFRGHLQEUDFHVIROORZLQJWKHifVWDWHPHQWUXQV
RQO\LIWKHQXPEHURISUHGLFWHGODSVRIIXHOLVOHVVWKDQ&OHDUO\LVOHVVWKDQVR
LQWKLVFDVHLWOOUXQWKDWFRGHSULQWLQJRXWWKHIROORZLQJ
Low on fuel. Laps remaining: 1.60701035044548

Flow Control with Selection Statements | 41

<RXQHHGWRXVHWKHULJKWNLQGRIH[SUHVVLRQLQDQ ifVWDWHPHQW,QWKLVFDVHZHYH
SHUIRUPHGDFRPSDULVRQZHUHWHVWLQJWRVHHLIDYDULDEOHLVOHVVWKDQ7KHUHDUHRQO\
WZRSRVVLEOHRXWFRPHVHLWKHULWVOHVVWKDQRULWLVQW6RWKLVH[SUHVVLRQLVFOHDUO\
GLIIHUHQWLQQDWXUHWRWKHH[SUHVVLRQVSHUIRUPLQJPDWKHPDWLFDOFDOFXODWLRQV,I\RXZHUH
WRPRGLI\WKHSURJUDPVRWKDWLWSULQWVWKHYDOXHRIWKDWH[SUHVVLRQ
Console.WriteLine(predictedLapsUntilOutOfFuel < 4);

LWZRXOGGLVSOD\HLWKHUTrueRUFalse7KH1(7)UDPHZRUNKDVDVSHFLDOW\SHWRUHS
UHVHQWVXFKDQHLWKHURUFKRLFHFDOOHGSystem.BooleanDQGDVZLWKWKHQXPHULFW\SHV
&GHILQHVLWVRZQDOLDVIRUWKLVW\SH bool$Q ifVWDWHPHQWUHTXLUHVD%RROHDQH[
SUHVVLRQ6RLI\RXWU\WRXVHDQH[SUHVVLRQZLWKDQXPHULFUHVXOWVXFKDVWKLV
if (fuelTankCapacityKilos - fuelKilosConsumed)

WKHFRPSLOHUZLOOFRPSODLQZLWKWKHHUURU&DQQRWLPSOLFLWO\FRQYHUWW\SHGRXEOHWR
ERRO7KLVLVLWVZD\RIVD\LQJWKDWLWH[SHFWVDboolHLWKHUWUXHRUIDOVHDQG\RXYH
JLYHQLWDQXPEHU,QHIIHFWWKDWFRGHVD\VVRPHWKLQJOLNH,IIRXUWHHQDQGDKDOIWKHQ
GRWKLV:KDWZRXOGWKDWHYHQPHDQ"
7KH & ODQJXDJH GHFLGHG WR DQVZHU WKDW TXHVWLRQ E\ VD\LQJ WKDW 0 LV
HTXLYDOHQWWRIDOVHDQGDQ\WKLQJHOVHLVHTXLYDOHQWWRWUXH%XWWKDWZDV
RQO\EHFDXVHLWGLGQWKDYHDEXLOWLQ%RROHDQW\SHVRLWVifVWDWHPHQW
KDGWREHDEOHWRZRUNZLWKQXPHULFH[SUHVVLRQV7KLVWXUQHGRXWWREH
DIUHTXHQWFDXVHRIEXJVLQ&SURJUDPV6LQFH&GRHVKDYHDEXLOWLQ
boolW\SHLWLQVLVWVWKDWDQ ifVWDWHPHQWVH[SUHVVLRQLVDOZD\VRIW\SH
bool

&GHILQHVVHYHUDORSHUDWRUVZKLFKOLNHWKH <RSHUDWRUZHXVHGLQ([DPSOHFDQ
FRPSDUHWZRQXPEHUVWRSURGXFHD%RROHDQWUXHIDOVHDQVZHU7DEOHVKRZVWKHVH
6RPHRIWKHVHRSHUDWRUVFDQEHDSSOLHGWRQRQQXPHULFW\SHVWRR)RUH[DPSOH\RX
FDQXVHWKH==DQG!=RSHUDWRUVWRFRPSDUHVWULQJV <RXPLJKWH[SHFWWKHRWKHUFRP
SDULVRQRSHUDWRUVWRZRUNWRRWHOOLQJ\RXZKHWKHURQHVWULQJZRXOGFRPHEHIRUHRU
DIWHUDQRWKHUZKHQVRUWHGDOSKDEHWLFDOO\+RZHYHUWKHUHVPRUHWKDQRQHZD\WRVRUW
VWULQJVLWWXUQVRXWWKDWWKHPHWKRGXVHGYDULHVEDVHGRQODQJXDJHDQGFXOWXUH$QG
UDWKHUWKDQKDYHDQH[SUHVVLRQVXFKDVtext1 < text2PHDQGLIIHUHQWWKLQJVLQGLIIHUHQW
FRQWH[WV&VLPSO\GRHVQWDOORZLW,I\RXZDQWWRFRPSDUHVWULQJV\RXKDYHWRFDOO
RQHRIWKHPHWKRGVSURYLGHGE\WKH StringFODVVWKDWOHWV\RXVD\KRZ\RXGOLNHWKH
FRPSDULVRQWRZRUN

7KH%RROHDQW\SHLVQDPHGDIWHU*HRUJH%RROHZKRLQYHQWHGDEUDQFKRIPDWKHPDWLFDOORJLFWKDWXVHVMXVW
WZRYDOXHVWUXHDQGIDOVH+LVV\VWHPLVIXQGDPHQWDOWRWKHRSHUDWLRQRIDOOGLJLWDOHOHFWURQLFVVRLWVDVKDPH
WKDW&GRHVQWVHHILWWRVSHOOKLVQDPHSURSHUO\

42 | Chapter 2:Basic Programming Techniques

7DEOH&RPSDULVRQRSHUDWRUV
C# operator

Meaning

<

Less than

>

Greater than

<=

Less than or equal to

>=

Greater than or equal to

==

Equal to

!=

Not equal to

-XVWDV\RXFDQFRPELQHQXPHULFH[SUHVVLRQVLQWRPRUHFRPSOH[DQGSRZHUIXOH[
SUHVVLRQV & SURYLGHV RSHUDWRUV WKDW OHW \RX FRPELQH %RROHDQ H[SUHVVLRQV WR WHVW
PXOWLSOHFRQGLWLRQV7KH&&RSHUDWRUFRPELQHVWZR%RROHDQH[SUHVVLRQVLQWRDVLQJOH
H[SUHVVLRQWKDWVWUXHRQO\LIERWKFRQGLWLRQVDUHWUXH,QRXUUDFHH[DPSOHZHPLJKW
XVHWKLVWRKLGHWKHORZIXHOZDUQLQJLIZHUHQHDUWKHHQGRIWKHUDFHDQGWKHFDUKDV
HQRXJKIXHOWRPDNHLWWRWKHILQLVKOLQH,PDJLQHWKDWZHDGGHGDQH[WUDDUJXPHQWWR
SDVVLQWKHQXPEHURIUHPDLQLQJODSVLQWKHUDFHDQGDQDGGLWLRQDOYDULDEOHWRKROG
WKDWYDOXHZHFRXOGZULWH
if ((predictedLapsUntilOutOfFuel < 4) &&
(predictedLapsUntilOutOfFuel < remainingLapsInRace))
{
Console.WriteLine("Low on fuel. Laps remaining: " +
predictedLapsUntilOutOfFuel);
}

7KLVKDVWKHVDPHHIIHFWDVWKHIROORZLQJVOLJKWO\PRUHYHUERVHFRGH
if (predictedLapsUntilOutOfFuel < 4)
{
if (predictedLapsUntilOutOfFuel < remainingLapsInRace)
{
Console.WriteLine("Low on fuel. Laps remaining: " +
predictedLapsUntilOutOfFuel);
}
}

2QO\LIERWKFRQGLWLRQVDUHWUXHZLOOWKHPHVVDJHEHGLVSOD\HG7KHUHVDOVRD||RSHU
DWRU/LNH &&WKH ||RSHUDWRUFRPELQHVWZR%RROHDQH[SUHVVLRQVEXWZLOOEH trueLI
HLWKHURIWKHPLVWUXH

Flow Control with Selection Statements | 43

if...else
7KHifVWDWHPHQWH[DPSOHVZHYHORRNHGDWVRIDUMXVWGHFLGHZKHWKHUWRH[HFXWHVRPH
RSWLRQDOFRGHEXWZKDWLIZHZDQWWRFKRRVHEHWZHHQWZRDFWLRQV"$Q ifVWDWHPHQW
FDQRSWLRQDOO\LQFOXGHDQ elseVHFWLRQWKDWUXQVLIWKHFRQGLWLRQZDVIDOVHDVLQWKLV
K\SRWKHWLFDOSRVWUDFHH[DPSOH
if (weWonTheRace)
{
Sponsors.DemandMoreMoney();
}
else
{
Driver.ReducePay();
}

2QHW\SHRILIHOVHWHVWFRPHVXSRIWHQHQRXJKWKDW&IDPLO\ODQJXDJHVKDYHDVSHFLDO
V\QWD[IRULWVRPHWLPHV\RXZDQWWRSLFNEHWZHHQRQHRIWZRYDOXHVEDVHGRQVRPH
WHVW<RXFRXOGZULWHWKLV
string messageForDriver;
if (weWonTheRace)
{
messageForDriver = "Congratulations";
}
else
{
messageForDriver = "You're fired";
}

6RPHWLPHVLWVPRUHFRQYHQLHQWWREHDEOHWRSXWWKLVLQVLGHDQH[SUHVVLRQ7KLVFDQEH
GRQHZLWKWKHWHUQDU\RSHUDWRUVRFDOOHGEHFDXVHLWFRQWDLQVWKUHHH[SUHVVLRQVD%RR
OHDQWHVWH[SUHVVLRQWKHH[SUHVVLRQWRXVHLIWKHWHVWLVWUXHDQGWKHH[SUHVVLRQWRXVH
LIWKHWHVWLVIDOVH7KHV\QWD[XVHV?DQG:FKDUDFWHUVWRVHSDUDWHWKHH[SUHVVLRQVVRWKH
EDVLF SDWWHUQ LV test ? resultIfTrue : resultIfFalse :H FDQ FROODSVH WKH SUHYLRXV
ifelseH[DPSOHWRDVLQJOHDVVLJQPHQWVWDWHPHQWE\XVLQJWKHWHUQDU\RSHUDWRULQWKH
H[SUHVVLRQRQWKHULJKWKDQGVLGHRIWKHDVVLJQPHQW
string messageForDriver = weWonTheRace ?
"Congratulations" :
"You're fired";

<RXGRQWKDYHWRVSDFHLWRXWOLNHWKLVE\WKHZD\ZHSXWWKHWZRRSWLRQVRQVHSDUDWH
OLQHVWRPDNHWKHPHDV\WRVHH%XWVRPHSHRSOHOLNHWRXVHWKHWHUQDU\RSHUDWRUWR
FRQGHQVHDVPXFKORJLFDVSRVVLEOHLQWRDVOLWWOHVSDFHDVSRVVLEOHWKLVLVHLWKHUDGPLU
DEOHFRQFLVHQHVVRULPSHQHWUDEOHWHUVHQHVVGHSHQGLQJRQ\RXUSHUVRQDOWDVWHV
<RXFDQVWULQJPXOWLSOHifelseWHVWVWRJHWKHU7RVHHKRZWKDWPLJKWEHXVHIXOLQRXU
H[DPSOHFRQVLGHUKRZLQPRWRUUDFLQJLQFLGHQWVRUZHDWKHUFRQGLWLRQVPD\FDXVHWKH
UDFH VWHZDUGV WR LQLWLDWH FHUWDLQ VDIHW\ SURFHGXUHV VXFK DV WHPSRUDULO\ GLVDOORZLQJ
RYHUWDNLQJPDQHXYHUVZKLOHZUHFNDJHLVFOHDUHGIURPWKHWUDFNUHOHDVLQJWKHVDIHW\FDU
IRUWKHGULYHUVWRIROORZVORZO\LIWKHZUHFNDJHLVSDUWLFXODUO\VSHFWDFXODURULQH[WUHPH

44 | Chapter 2:Basic Programming Techniques

FDVHVUHGIODJJLQJWKHUDFHDWHPSRUDU\FRPSOHWHKDOWIROORZHGE\DUHVWDUW(DFK
RI WKHVH KDV LWV RZQ DSSURSULDWH UHVSRQVH ZKLFK FDQ EH GHDOW ZLWK E\ D FKDLQ RI
ifelse ifelseVWDWHPHQWVDVVKRZQLQ([DPSOH
([DPSOH7HVWLQJPXOWLSOHFRQGLWLRQVZLWKLIDQGHOVH
string raceStatus = args[3];
if (raceStatus == "YellowFlag")
{
Driver.TellNotToOvertake();
}
else if (raceStatus == "SafetyCar")
{
Driver.WarnAboutSafetyCar();
}
else if (raceStatus == "RedFlag")
{
if (ourDriverCausedIncident)
{
Factory.OrderNewCar();
Driver.ReducePay();
if (feelingGenerous)
{
Driver.Resuscitate();
}
}
else
{
Driver.CallBackToPit();
}
}
else
{
Driver.TellToDriveFaster();
}

:KLOHWKLVZRUNVWKHUHVDQDOWHUQDWLYH7KLVSDWWHUQRIFKRRVLQJRQHRSWLRQRXWRI
PDQ\LVVXIILFLHQWO\FRPPRQWKDW&KDVDVSHFLDOVHOHFWLRQVWDWHPHQWWRKDQGOHLW

switch and case Statements


$switchVWDWHPHQWOHWV\RXVSHFLI\DOLVWRIH[SHFWHGYDOXHVDQGZKDWWRGRIRUHDFK
YDOXH7KHYDOXHVFDQEHHLWKHUVWULQJVRULQWHJUDOW\SHV ,QWHJUDOW\SHVLQFOXGH int
shortHWF\RXFDQQRWVZLWFKRQIORDWLQJSRLQWQXPEHUV(QXPHUDWLRQW\SHVZKLFK
DUHGLVFXVVHGLQ&KDSWHUDUHFRQVLGHUHGWREHLQWHJUDOW\SHVIRUWKHSXUSRVHVRID
switchVWDWHPHQW :HFDQXVHWKLVWRUHZULWH([DPSOHDVVKRZQLQ([DPSOH

Flow Control with Selection Statements | 45

([DPSOH7HVWLQJPXOWLSOHFRQGLWLRQVZLWKVZLWFKDQGFDVH
string raceStatus = args[3];
switch (raceStatus)
{
case "YellowFlag":
Driver.TellNotToOvertake();
break;
case "SafetyCar":
Driver.WarnAboutSafetyCar();
break;
case "RedFlag":
if (ourDriverCausedIncident)
{
Factory.OrderNewCar();
Driver.ReducePay();
if (feelingGenerous)
{
Driver.Resuscitate();
}
}
else
{
Driver.CallBackToPit();
}
break;

default:
Driver.TellToDriveFaster();
break;
}

7KHbreakNH\ZRUG\RXFDQVHHDWWKHHQGRIHDFKcaseLVSUHVHQWPDLQO\
IRUFRQVLVWHQF\ZLWKRWKHU&OLNHODQJXDJHV,Q&DQG&LI\RXOHDYH
RIIWKH breakWKHFRGHZLOOIDOORXWRIRQHFDVHWKURXJKWRWKHQH[W
6RLIZHOHIWRIIWKH breakLQWKH YellowFlagFDVHZHGHQGXSWHOOLQJ
GULYHUVQRWWRRYHUWDNHDQGWKHQZDUQLQJWKHPDERXWWKHVDIHW\FDU7KLV
ZRXOGEHDEXJDQGLQJHQHUDO\RXDOPRVWDOZD\VGRQWZDQWIDOO
WKURXJK,WVXQIRUWXQDWHWKDWLQ&DQG&IDOOWKURXJKZDVWKHGHIDXOW
&FKDQJHVWKLVLI\RXZDQWIDOOWKURXJK\RXPXVWDVNIRULWH[SOLFLWO\
E\ZULWLQJ goto case "SafetyCar"%XWGHVSLWHIDOOWKURXJKQRORQJHU
EHLQJWKHLPSOLFLWGHIDXOW\RXVWLOOQHHGWRZULWHWKHVDPHbreakVWDWH
PHQWDV\RXZRXOGLQRWKHU&IDPLO\ODQJXDJHVZKHQ\RXGRQWZDQW
IDOOWKURXJKLI\RXOHDYHLWRXW\RXOOJHWDQHUURU

<RX PLJKW EH ZRQGHULQJ ZKDW LV WKH SRLQWWKLV GRHV H[DFWO\ WKH VDPH DV ([DP
SOHVRZK\GRZHQHHGDGLIIHUHQWV\QWD["$VLWKDSSHQVZHGRQWWKHUHVQRWK
LQJ\RXFDQGRZLWKswitchDQGcaseWKDW\RXFDQWGRZLWKifDQGelse%XWswitchDQG
46 | Chapter 2:Basic Programming Techniques

caseRIIHURQHXVHIXODGYDQWDJHWKH\PDNHLWFOHDUZKDWZHUHGRLQJZHUHORRNLQJ
DWDVLQJOHH[SUHVVLRQ raceStatus DQGZHUHFKRRVLQJRQHRIDQXPEHURIRSWLRQVEDVHG

RQWKHYDOXHRIWKDWH[SUHVVLRQ$GHYHORSHUIDPLOLDUZLWK&FDQORRNDWWKLVFRGHDQG
XQGHUVWDQGWKHVWUXFWXUHRIWKHGHFLVLRQPDNLQJSURFHVVDWDJODQFH:LWKWKHSUHYLRXV
H[DPSOH\RXZRXOGQHHGWRORRNDWHDFK else ifVWDWHPHQWLQWXUQWRPDNHVXUHLW
ZDVQWGRLQJVRPHWKLQJPRUHFRPSOH[FKDLQHGelse ifVWDWHPHQWVDUHPRUHIOH[LEOH
WKDQ switchVWDWHPHQWVEHFDXVHHDFKQHZOLQNLQWKHFKDLQLVDOORZHGWRWHVWDFRP
SOHWHO\GLIIHUHQWH[SUHVVLRQEXWWKDWIOH[LELOLW\FRPHVDWWKHFRVWRIPDNLQJLWKDUGHUWR
XQGHUVWDQGWKHFRGH6RPHWLPHVDVHOILPSRVHGFRQVWUDLQWFDQPDNHFRGHHDVLHUWRUHDG
DQGPDLQWDLQDQGDswitchVWDWHPHQWLVDJRRGH[DPSOHRIWKDW
6HOHFWLRQVWDWHPHQWVPDNHSURJUDPVFRQVLGHUDEO\PRUHXVHIXOWKDQWKH\ZRXOGRWK
HUZLVHEHWKH\HQDEOHSURJUDPVWRPDNHGHFLVLRQV%XWRXUH[DPSOHVDUHVWLOOUDWKHU
VWUDLJKWIRUZDUGWKH\UXQMXVWRQFHIURPVWDUWWRILQLVKZLWKWKHRGGYDULDWLRQLQWKH
H[HFXWLRQIORZ7KHDPRXQWRIZRUNWKDWLVGRQHLVSUHWW\WULYLDO6RWKHUHVDQRWKHU
NLQGRIVWDWHPHQWWKDWSOD\VWRDFRPSXWHUVJUHDWHVWVWUHQJWKWKHDELOLW\WRSHUIRUP
VLPSOHUHSHWLWLYHWDVNVPDQ\WLPHVRYHU

Iteration Statements
$QLWHUDWLRQVWDWHPHQWDOORZVDVHTXHQFHRIRWKHUVWDWHPHQWVWREHH[HFXWHGVHYHUDO
WLPHV 5HSHDWHGH[HFXWLRQLVDOVRRIWHQNQRZQDVDORRSEHFDXVHOLNHWKHUDFHFDUWKH
FRGHJRHVURXQGDQGURXQGDJDLQ 7KLVVHHPVOLNHLWFRXOGEHXVHIXOLQRXUUDFHGDWD
DQDO\VLVUDFHFDUVXVXDOO\FRPSOHWHPDQ\ODSVVRZHZLOOSUREDEO\KDYHPXOWLSOHVHWV
RIGDWDWRSURFHVV,WZRXOGEHDQQR\LQJWRKDYHWRZULWHWKHVDPHFRGHWLPHVMXVW
WRSURFHVVDOOWKHGDWDIRUDODSUDFH)RUWXQDWHO\ZHGRQWKDYHWRZHFDQXVHRQH
RI&VLWHUDWLRQVWDWHPHQWV
,PDJLQHWKDWLQVWHDGRISDVVLQJLQWLPLQJRUIXHOLQIRUPDWLRQDVFRPPDQGOLQHDUJX
PHQWVWKHGDWDZDVLQILOHV:HPLJKWKDYHDWH[WILOHFRQWDLQLQJRQHOLQHSHUODSZLWK
WKHHODSVHGWLPHDWWKHHQGRIHDFKODS$QRWKHUWH[WILOHFRXOGFRQWDLQWKHUHPDLQLQJ
IXHODWWKHHQGRIHDFKODS7RLOOXVWUDWHKRZWRZRUNZLWKVXFKGDWDZHOOVWDUWZLWKD
VLPSOHH[DPSOHILQGLQJWKHODSRQZKLFKRXUGULYHUZHQWTXLFNHVW
6LQFHWKLVFRGHLVDOLWWOHGLIIHUHQWIURPWKHSUHYLRXVH[DPSOHVWDUWDQHZSURMHFWLI\RX
ZDQWWRIROORZDORQJ0DNHDQRWKHUFRQVROHDSSOLFDWLRQFDOOHGLapAnalysis
7REHDEOHWRWHVWRXUFRGHZHOOQHHGDILOHFRQWDLQLQJWKHWLPLQJLQIRUPDWLRQ<RXFDQ
DGGWKLVWR\RXU9LVXDO6WXGLRSURMHFW5LJKWFOLFNRQWKH LapAnalysisSURMHFWLQWKH
6ROXWLRQ([SORUHUDQGVHOHFW$GG1HZ,WHPIURPWKHFRQWH[WPHQX 2UMXVWSUHVV
&WUO6KLIW$ ,QWKH,QVWDOOHG7HPSODWHVVHFWLRQRQWKHOHIWVHOHFWWKH*HQHUDOFDWHJRU\
XQGHU 9LVXDO & ,WHPV DQG WKHQ LQ WKH FHQWUDO DUHD VHOHFW 7H[W )LOH &DOO WKH ILOH
/DS7LPHVW[WDQGFOLFN$GG<RXOOQHHGWKLVILOHWREHVRPHZKHUHWKHSURJUDPFDQJHW
WR*RWRWKH3URSHUWLHVSDQHOIRUWKHILOHWKLVLVXVXDOO\EHORZWKH6ROXWLRQ([SORUHU
SDQHOEXWLI\RXGRQWVHHLWULJKWFOLFNRQ/DS7LPHVW[WLQWKH6ROXWLRQ([SORUHUDQG

Iteration Statements | 47

VHOHFW3URSHUWLHV,QWKH3URSHUWLHVSDQHO\RXVKRXOGVHHD&RS\WR2XWSXW'LUHFWRU\
SURSHUW\%\GHIDXOWWKLVLVVHWWR'RQRWFRS\&KDQJHLWWR&RS\LIQHZHU9LVXDO
6WXGLRZLOOHQVXUHWKDWDQXSWRGDWHFRS\RIWKHILOHLVDYDLODEOHLQWKHELQ?'HEXJIROGHU
LQZKLFKLWEXLOGV\RXUSURJUDP<RXOOQHHGVRPHGDWDLQWKLVILOH:HOOEHXVLQJWKH
IROORZLQJWKHVHQXPEHUVUHSUHVHQWWKHHODSVHGWLPHLQVHFRQGVVLQFHWKHVWDUWRIWKH
UDFHDWWKHHQGRIHDFKODS
78.73
157.2
237.1
313.8
390.7
470.2

7KHSURJUDPLVJRLQJWRUHDGLQWKHFRQWHQWVRIWKHILOH7RGRWKLVLWOOQHHGWRXVH
W\SHVIURPWKHSystem.IOQDPHVSDFHVR\RXOOQHHGWRDGGWKHIROORZLQJQHDUWKHWRS
RI\RXU3URJUDPFVILOH
using System.IO;

7KHQLQVLGHWKHMainPHWKRGXVHWKHIROORZLQJFRGHWRUHDGWKHFRQWHQWVRIWKHILOH
string[] lines = File.ReadAllLines("LapTimes.txt");

7KHFileW\SHLVLQWKHSystem.IOQDPHVSDFHDQGLWVReadAllLinesPHWKRGUHDGVLQDOO
WKHOLQHVRIDWH[WILOHDQGUHWXUQVDQDUUD\RIVWULQJV string[] ZLWKRQHHQWU\SHUOLQH
7KHHDVLHVWZD\WRZRUNWKURXJKDOOWKHVHHQWULHVLVZLWKDforeachVWDWHPHQW

foreach Statements
$foreachVWDWHPHQWH[HFXWHVDEORFNRIVWDWHPHQWVRQFHIRUHYHU\LWHPLQDFROOHFWLRQ
VXFKDVDQDUUD\)RUH[DPSOHWKLV
foreach (string line in lines)
{
Console.WriteLine(line);
}

ZLOOGLVSOD\HYHU\OLQHRIWH[WIURPWKHlinesDUUD\ZHMXVWEXLOW7KHEORFNWRH[HFXWH
HDFKWLPHDURXQGLVDVHYHUGHOLPLWHGE\D{ }SDLU
:HKDYHWRSURYLGHWKH&FRPSLOHUZLWKWZRWKLQJVDWWKHVWDUWRIDforeachORRSWKH
YDULDEOHZHGOLNHWRXVHWRDFFHVVHDFKLWHPIURPWKHFROOHFWLRQDQGWKHFROOHFWLRQ
LWVHOI7KHstring lineSDUWGHFODUHVWKHILUVWELWWKHVRFDOOHGLWHUDWLRQYDULDEOH$QG
WKHQWKHin linesSDUWVD\VWKDWZHZDQWWRLWHUDWHRYHUWKHLWHPVLQWKHlinesDUUD\6R
HDFKWLPHDURXQGWKHORRSlineZLOOFRQWDLQWKHQH[WVWULQJLQlines
:HFDQXVHWKLVWRGLVFRYHUWKHIDVWHVWODSWLPHDVVKRZQLQ([DPSOH

48 | Chapter 2:Basic Programming Techniques

([DPSOH)LQGLQJWKHIDVWHVWODSZLWKIRUHDFK
string[] lines = File.ReadAllLines("LapTimes.txt");
double currentLapStartTime = 0;
double fastestLapTime = 0;
foreach (string line in lines)
{
double lapEndTime = double.Parse(line);
double lapTime = lapEndTime - currentLapStartTime;
if (fastestLapTime == 0 || lapTime < fastestLapTime)
{
fastestLapTime = lapTime;
}
currentLapStartTime = lapEndTime;
}
Console.WriteLine("Fastest lap time: " + fastestLapTime);

7KHcurrentLapStartTimeEHJLQVDW]HUREXWLVXSGDWHGWRWKHHQGWLPHRIWKHSUHYLRXV
ODSHDFKWLPHDURXQGWKHORRSZHQHHGWKLVWRZRUNRXWKRZORQJHDFKODSWRRN
EHFDXVHHDFKOLQHRIWKHILOHFRQWDLQVWKHWRWDOHODSVHGUDFHWLPHDWHDFKODS$QGWKH
fastestLapTimeYDULDEOHFRQWDLQVWKHWLPHRIWKHIDVWHVWODS\HWIRXQGLWOOEHXSGDWHG
HDFKWLPHDIDVWHUODSLVIRXQG :HDOVRXSGDWHLWZKHQLWV]HURZKLFKLWZLOOEHWKH
ILUVWWLPHZHJRDURXQG
7KLVILQGVWKHIDVWHVWODSWLPHVHFRQGVLQWKHH[DPSOHGDWDZHUHXVLQJ%XWLW
GRHVQWWHOOXVZKLFKODSWKDWZDV/RRNLQJDWWKHQXPEHUVZHFDQVHHWKDWLWKDSSHQV
WREHWKHIRXUWKEXWLWZRXOGEHQLFHLIWKHSURJUDPFRXOGWHOOXV2QHZD\WRGRWKLV
LVWRGHFODUHDQHZYDULDEOHFDOOHG lapNumberLQLWLDOL]LQJLWWRRXWVLGHWKHORRSDQG
DGGLQJRQHHDFKWLPHDURXQGWRNHHSWUDFNRIWKHFXUUHQWODS7KHQZHFDQUHFRUGWKH
ODSQXPEHURQZKLFKZHIRXQGWKHIDVWHVWWLPH([DPSOHVKRZVDPRGLILHGYHU
VLRQZLWKWKHDGGLWLRQDOFRGHLQEROG
([DPSOH)DVWHVWODSLQFOXGLQJODSQXPEHU
string[] lines = File.ReadAllLines("LapTimes.txt");
double currentLapStartTime = 0;
double fastestLapTime = 0;
int lapNumber = 1;
int fastestLapNumber = 0;
foreach (string line in lines)
{
double lapEndTime = double.Parse(line);
double lapTime = lapEndTime - currentLapStartTime;
if (fastestLapTime == 0 || lapTime < fastestLapTime)
{
fastestLapTime = lapTime;
fastestLapNumber = lapNumber;
}
currentLapStartTime = lapEndTime;
lapNumber += 1;
}
Console.WriteLine("Fastest lap: " + fastestLapNumber);
Console.WriteLine("Fastest lap time: " + fastestLapTime);

Iteration Statements | 49

,I\RXUHWU\LQJWKLVRXWWKLVPLJKWEHDJRRGRSSRUWXQLW\WRDFTXDLQW\RXUVHOIZLWK
9LVXDO6WXGLRVGHEXJJLQJIHDWXUHVVHHWKHVLGHEDUEHORZ

The Debugger
:KHQ\RXUFRGHLQFOXGHVIORZFRQWUROVWDWHPHQWVWKDWFDQYDU\WKHVHTXHQFHRIRSHU
DWLRQVRUKRZPDQ\WLPHVFRGHUXQVLWFDQEHXVHIXOWRLQVSHFWWKHH[HFXWLRQ,I\RXU
FRGHGRHVQWZRUNTXLWHKRZ\RXH[SHFW\RXFDQZDWFKZKDWLWGRHVRQHOLQHDWDWLPH
E\XVLQJ9LVXDO6WXGLRVEXLOWLQGHEXJJHU
,ILQVWHDGRIUXQQLQJWKHSURJUDPQRUPDOO\\RXUXQLWZLWKWKH'HEXJ6WHS,QWRPHQX
LWHP RUWKH)NH\ERDUGVKRUWFXWLI\RXUHXVLQJWKH&SURILOHIRU9LVXDO6WXGLR LW
ZLOOUXQWKHFRGHRQHOLQHDWDWLPHHDFKWLPH\RXFKRRVH6WHS,QWRLWZLOOUXQRQH
PRUHOLQHRIFRGH$QGLI\RXKRYHU\RXUPRXVHSRLQWHURYHUDYDULDEOHLWZLOOVKRZ
\RXWKHFXUUHQWYDOXHDOORZLQJ\RXWRVHHWKHFXUUHQWVWDWHRI\RXUSURJUDPDVZHOODV
LWVFXUUHQWSRVLWLRQ
<RXFDQDOVRDUUDQJHIRUWKHSURJUDPWRVWRSLQWKHGHEXJJHUZKHQLWUHDFKHVDSDUWLFXODU
SRLQWE\VHWWLQJDEUHDNSRLQWHLWKHUE\FOLFNLQJLQWKHOHIWPDUJLQRIWKHFRGHHGLWRURU
E\SXWWLQJWKHFXUVRURQWKHOLQHLQTXHVWLRQDQGVHOHFWLQJ'HEXJ7RJJOH%UHDNSRLQW
$UHGGRWDSSHDUVLQWKHPDUJLQWRLQGLFDWHWKDWWKHFRGHZLOOVWRSZKHQLWUHDFKHVWKLV
SRLQW%UHDNSRLQWVDUHDFWLYHRQO\LI\RXUXQWKHSURJUDPIURPZLWKLQWKHGHEXJJHUVR
\RXQHHGWRPDNHVXUH\RXVWDUWZLWK'HEXJ6WDUW'HEXJJLQJ RUSUHVV) LI\RXZDQW
EUHDNSRLQWVWRZRUN
9LVXDO6WXGLRVGHEXJJHULVDSRZHUIXODQGIOH[LEOHV\VWHPWKHVHVLPSOHWHFKQLTXHV
EDUHO\VFUDWFKLWVVXUIDFHEXWWKH\DUHYHU\XVHIXOZKHQWU\LQJWRGLDJQRVHWURXEOHVRPH
EHKDYLRULQDSURJUDP

([DPSOHZRUNVZHOOHQRXJKEXWWKHUHVDQDOWHUQDWLYHLWHUDWLRQVWDWHPHQW\RX
FDQXVHIRUWKLVVRUWRIVFHQDULRDforVWDWHPHQW

for Statements
$ forVWDWHPHQWLVDORRSLQZKLFKVRPHYDULDEOHLVLQLWLDOL]HGWRDVWDUWYDOXHDQGLV
PRGLILHGHDFKWLPHDURXQGWKHORRS7KHORRSZLOOUXQIRUDVORQJDVVRPHFRQGLWLRQ
UHPDLQVWUXHWKLVPHDQVDforORRSGRHVQRWQHFHVVDULO\KDYHWRLQYROYHDFROOHFWLRQ
XQOLNHDforeachORRS([DPSOHLVDVLPSOHORRSWKDWFRXQWVWR
([DPSOH&RXQWLQJZLWKDIRUORRS
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
Console.WriteLine("Coming, ready or not!");

7KH forNH\ZRUGLVIROORZHGE\SDUHQWKHVHVFRQWDLQLQJWKUHHSLHFHV)LUVWDYDULDEOH
LVGHFODUHGDQGLQLWLDOL]HG7KHQWKHFRQGLWLRQLVVSHFLILHGWKLVSDUWLFXODUORRSZLOO
50 | Chapter 2:Basic Programming Techniques

You might also like