Programming c#1
Programming c#1
Introducing C#
$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
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(7ZKLFKLVQRWDQDFURQ\PGHVSLWH
DSSHDUDQFHVLVDIUDPHZRUNIRUEXLOGLQJZHEDSSOLFDWLRQV1RWDOOIUDPHZRUNVDUH
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
ELOLWLHVEROWHGRQ7KHFKRLFHEHWZHHQWKHVHODQJXDJHVFRPHVGRZQWRZKDWVW\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
,QIUDVWUXFWXUHVSHFLILFDWLRQVWKDWGHILQHWKHVWDQGDUGL]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
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
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\LQWHURSDVVHPEOLHV3,$VRQWKHWDUJHW
PDFKLQHWREHDEOHWRXVH&20$3,VVXFKDV2IILFHDXWRPDWLRQEXWLQ&\RXQR
ORQJHUKDYHWRGRWKLV<RXVWLOOQHHGWKHVH3,$VRQ\RXUGHYHORSPHQWPDFKLQHEXWWKH
&FRPSLOHUFDQH[WUDFWWKHLQIRUPDWLRQ\RXUFRGHUHTXLUHVDQGFRS\LWLQWR\RXU
DSSOLFDWLRQ7KLVVDYHV\RXIURPGHSOR\LQJ3,$VWRWKHWDUJHWPDFKLQHKHQFHWKHQDPH
QR3,$
:KLOHWKHVHQHZODQJXDJHIHDWXUHVDUHSDUWLFXODUO\ZHOOVXLWHGWR&20DXWRPDWLRQ
LQWHURSVFHQDULRVWKH\FDQEHXVHGDQ\ZKHUH7KHQR3,$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
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 HelloWorld2.VRWKDWVHTXDOO\XQLPDJLQDWLYHEXWDWOHDVW
LWVGHVFULSWLYH9LVXDO6WXGLRDOVRZDQWVWRNQRZZKHUH\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
DQ\ZKHUHHOVH2QHUHDVRQLVGLVDPELJXDWLRQVRPHW\SHQDPHVFURSXSLQPXOWLSOH
SODFHV)RUH[DPSOHWKH$631(7ZHEIUDPHZRUNKDVDW\SHFDOOHG ControlDQGVR
GRERWK:3)DQG:LQGRZV)RUPV7KH\UHSUHVHQWVLPLODUFRQFHSWVEXWWKH\DUHXVHG
LQFRPSOHWHO\GLIIHUHQWFRQWH[WVZHEDSSOLFDWLRQVYHUVXV: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(7ZHEDSSOLFDWLRQV6RUDWKHUWKDQVHDUFKLQJWKURXJK
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
)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
QDPHV\RXOLNHIRU\RXUQDPHVSDFHVWKHUHVQRUHTXLUHPHQWWKDWWKHQDPHVSDFHQDPH
PDWFKWKHSURJUDPQDPH
7KH&FRPSLOHUZLOOHYHQOHW\RXSXW\RXURZQFRGHLQWRQDPHVSDFHV
ZKRVHQDPHVEHJLQZLWK SystemEXW\RXVKRXOGQRWGRWKLVDWOHDVW
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
FRGH6RPHODQJXDJHVVXFKDV&GRQRWLPSRVHWKLVFRQVWUDLQWEXW&LVDQREMHFW
RULHQWHG22SURJUDPPLQJODQJXDJH: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
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[WVWULQJVWKHVTXDUHEUDFNHWVLQGLFDWLQJWKDW
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");
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
<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
6RPHSURMHFWW\SHVSURGXFHQHLWKHUOLEUDULHVQRUH[HFXWDEOHV)RUH[
DPSOHWKHUHVDSURMHFWW\SHIRUEXLOGLQJPVL:LQGRZV,QVWDOOHUILOHV
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
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\ILOHDVVHPEO\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\XQXVHGXVLQJGLUHFWLYHVIURPWKHVRXUFHFRGHWKHSURJUDPZLOOVWLOOZRUN7RDGG
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+HOORZRUOGDJDLQZLWKIHZHUXVLQJGLUHFWLYHV
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
:LWKWKHRGGH[FHSWLRQLQDVWULQJFRQVWDQWVXFKDVWKH+HOORZRUOGWH[WLQWKLVH[DPSOHZKLWHVSDFHLV
WUHDWHGOLWHUDOO\&SUHVXPHVWKDWLI\RXSXWVD\WKUHHVSDFHVLQVRPHWH[WHQFORVHGLQGRXEOHTXRWHV\RX
UHDOO\ZDQWWKUHHVSDFHV
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("");
/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. */
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
ZRUWKGRLQJ1RWOHDVWEHFDXVHLI\RXYHQRWSDLGHQRXJKDWWHQWLRQWRGHWDLOWRQRWLFH
WKDWWKHFRPPHQWVDUHQRORQJHUDFFXUDWHFKDQFHVDUHWKHUHDUHRWKHUSUREOHPV\RXYH
QRWQRWLFHG
,IDGHYHORSHUVWDUWVZULWLQJFRGHWRLQYRNHWKLVPHWKRG9LVXDO6WXGLRZLOOVKRZDSRS
XSOLVWLQJDOODYDLODEOHPHPEHUVPDWFKLQJZKDWVKHVW\SHGVRIDUDQGDOVRDGGVDWRRO
WLSVKRZLQJWKHLQIRUPDWLRQIURPWKH<summary>HOHPHQWRIWKHVHOHFWHGPHWKRGLQWKH
OLVW DV )LJXUH VKRZV <RXOO VHH VLPLODU LQIRUPDWLRQ ZKHQ XVLQJ FODVVHV IURP
WKH1(7)UDPHZRUNGRFXPHQWDWLRQIURPLWVFODVVOLEUDULHVLVSURYLGHGDVSDUWRI
WKH1(7)UDPHZRUN6'.LQFOXGHGZLWK9LVXDO6WXGLR7KH&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\RXUHDG6HOHFW)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;
}
1RWLFHWKDWWKHYDULDEOHQDPHVkmTravelledelapsedSecondsDQGfuelKilosConsumed
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
byte
System.Byte
sbyte
System.SByte
short
System.Int16
ushort
System.UInt16
int
System.Int32
uint
System.UInt32
long
System.Int64
ulong
System.UInt64
(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\SHVKRUWIRULQWHJHUUHSUHVHQWVZKROHQXPEHUV7KDWVFOHDUO\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\SHVDUHXVHGIRUWKHIDLUO\UDUHRFFDVLRQVZKHQ\RXUHGHDOLQJZLWKODUJHHQRXJK
TXDQWLWLHVWKDWDELWUHSUHVHQWDWLRQVUDQJHRIDFRXSOHRIELOOLRQLVLQVXIILFLHQW
ELWYDOXHVDUHUDUHO\XVHGDOWKRXJKWKH\RFFDVLRQDOO\FURSXSZKHQKDYLQJWRGHDOZLWK
ROGSURJUDPPLQJLQWHUIDFHVILOHIRUPDWVRUQHWZRUNSURWRFROV
7KHELWbyteW\SHLVLPSRUWDQWEHFDXVHELQDU\,2HJZRUNLQJZLWKILOHVRUQHWZRUN
FRQQHFWLRQVLVPRVWO\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;
$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\OHintdoubleHWFVHHPVWR
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
RIGHFLPDOSODFHVRISUHFLVLRQ6RWKHIROORZLQJFRGH
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
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
1RZWKDWZHYHORRNHGDWWKHQXPHULFW\SHVWKHVWUXFWXUHRIWKHVHOLQHVLVSUHWW\FOHDU
:HVWDUWZLWKWKHW\SHRIGDWDZHGOLNHWRZRUNZLWKIROORZHGE\WKHQDPHZHGOLNH
WRXVHDQGWKHQZHXVHWKH =V\PEROWRDVVLJQDYDOXHWRWKHYDULDEOH%XWDVVLJQLQJ
FRQVWDQWYDOXHVLVQWYHU\H[FLWLQJ<RXFDQJHWWKHFRPSXWHUWRGRPRUHXVHIXOZRUN
EHFDXVH\RXFDQDVVLJQDQH[SUHVVLRQLQWRDYDULDEOH
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)
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
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;
$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
7KH&SURJUDPPLQJODQJXDJHVGHVLJQHUVFRQVLGHUHGDGGLQJRQHWREHDVXIILFLHQWO\
LPSRUWDQWFDVHWRGHYLVHDQHYHQPRUHVSHFLDOV\QWD[IRULWFDOOHGWKHLQFUHPHQWRSHU
DWRUZKLFK&GXO\RIIHUV
lapCount++;
7KHUHVDOVRDGHFUHPHQWRSHUDWRU --ZKLFKVXEWUDFWVRQH7KLVH[DPSOHLVDVWDWH
PHQWEXW\RXFDQDOVRXVHWKHLQFUHPHQWDQGGHFUHPHQWRSHUDWRUVLQWKHPLGGOHRIDQ
H[SUHVVLRQ
int currentLap = lapCount++;
%XWEHFDUHIXO7KHH[SUHVVLRQRQWKHULJKWRIWKLVDVVLJQPHQWVWDWHPHQWPHDQVHYDO
XDWHWKHFXUUHQWYDOXHRIlapCountDQGWKHQLQFUHPHQWlapCountDIWHUJHWWLQJLWVFXUUHQW
YDOXH6RLI lapCountZDVEHIRUHH[HFXWLQJWKLVVWDWHPHQW currentLapZRXOGEH
DQGlapCountZRXOGEHDIWHUH[HFXWLQJLW,I\RXZDQWWRXVHWKHXSGDWHGYDOXH\RX
SXWWKHLQFUHPHQWRUGHFUHPHQWRSHUDWRUEHIRUHLWVWDUJHW
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
: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
([DPSOHLIVWDWHPHQW
double fuelTankCapacityKilos = 80;
double lapLength = 5.141;
double
double
double
double
if (predictedLapsUntilOutOfFuel < 4)
{
Console.WriteLine("Low on fuel. Laps remaining: " +
predictedLapsUntilOutOfFuel);
}
7RWHVWWKLVZHQHHGWRUXQWKHSURJUDPZLWKFRPPDQGOLQHDUJXPHQWV<RXFRXOG
RSHQDFRPPDQGSURPSWPRYHWRWKHGLUHFWRU\FRQWDLQLQJWKHEXLOWRXWSXWRI\RXU
SURMHFWDQGUXQLWZLWKWKHDUJXPHQWV\RXZDQW,WOOEHLQWKHELQ?'HEXJIROGHUWKDW
9LVXDO6WXGLRFUHDWHVLQVLGH\RXUSURMHFWVIROGHU2U\RXFDQJHW9LVXDO6WXGLRWRSDVV
DUJXPHQWVIRU\RX7RGRWKDWJRWRWKH6ROXWLRQ([SORUHUSDQHODQGGRXEOHFOLFNRQ
WKH3URSHUWLHVLFRQ7KLVZLOORSHQWKHSURMHFWVSURSHUWLHVYLHZZKLFKKDVDVHULHVRI
WDEVRQWKHOHIWKDQGVLGH6HOHFWWKH'HEXJWDEDQGLQWKHPLGGOH\RXOOVHHD&RP
PDQGOLQHDUJXPHQWVWH[WER[DVVKRZQLQ)LJXUH
)LJXUH3DVVLQJFRPPDQGOLQHDUJXPHQWVLQ9LVXDO6WXGLR
7KH<V\PEROPHDQVOHVVWKDQ6RWKHFRGHLQEUDFHVIROORZLQJWKHifVWDWHPHQWUXQV
RQO\LIWKHQXPEHURISUHGLFWHGODSVRIIXHOLVOHVVWKDQ&OHDUO\LVOHVVWKDQVR
LQWKLVFDVHLWOOUXQWKDWFRGHSULQWLQJRXWWKHIROORZLQJ
Low on fuel. Laps remaining: 1.60701035044548
<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\
7DEOH&RPSDULVRQRSHUDWRUV
C# operator
Meaning
<
Less than
>
Greater than
<=
>=
==
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
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
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
([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[SUHVVLRQraceStatusDQGZHUHFKRRVLQJRQHRIDQXPEHURIRSWLRQVEDVHG
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
WLPHV5HSHDWHGH[HFXWLRQLVDOVRRIWHQNQRZQDVDORRSEHFDXVHOLNHWKHUDFHFDUWKH
FRGHJRHVURXQGDQGURXQGDJDLQ7KLVVHHPVOLNHLWFRXOGEHXVHIXOLQRXUUDFHGDWD
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[WPHQX2UMXVWSUHVV
&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\RIVWULQJVstring[]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
([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
LWHPRUWKH)NH\ERDUGVKRUWFXWLI\RXUHXVLQJWKH&SURILOHIRU9LVXDO6WXGLRLW
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'HEXJJLQJRUSUHVV)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