По просьбам читателей, попытался написать об основах языка. Впрочем, только приступив понял, что дело гиблое - чтобы писать об основах надо быть или МУДрым АКадемикОМ, или действительно иметь талант преподавателя. Я такового таланта не имею. Поэтому смогу только кратко рассказать о некоторых особенностях.
Catone.
Азы C#.
Часть 1.
Самые основные вещи в языке C# и платформе .NET вцелом.
Глава 1. Как читать чужой код.
По прось shy;бам чи shy;та shy;те shy;лей shy;, по shy;пы shy;тал shy;ся на shy;пи shy;сать об ос shy;но shy;вах язы shy;ка. Впро shy;чем, толь shy;ко прис shy;ту shy;пив по shy;нял, что де shy;ло гиб shy;лое - что shy;бы пи shy;сать об ос shy;но shy;вах на shy;до быть или МУД shy;рым АКа shy;де shy;ми shy;кОМ, или дей shy;ст shy;ви shy;тель shy;но иметь та shy;лант пре shy;по shy;да shy;ва shy;те shy;ля. Я та shy;ко shy;во shy;го та shy;лан shy;та не имею. По shy;это shy;му смо shy;гу толь shy;ко крат shy;ко рас shy;ска shy;зать о не shy;ко shy;то shy;рых осо shy;бен shy;нос shy;тях. По shy;няв, что от та shy;ко shy;го тол shy;ку ма shy;ло, я ре shy;шил на shy;пи shy;сать для на shy;ча shy;ла как чи shy;тать чу shy;жой код. Ибо, нас shy;коль shy;ко я по shy;ни shy;маю, ос shy;нов shy;ные проб shy;ле shy;мы с по shy;ни shy;ма shy;ни shy;ем ко shy;да кро shy;ют shy;ся не в нез shy;на shy;нии, а в не shy;уме shy;нии эти са shy;мые зна shy;ния до shy;быть. В этой об shy;лас shy;ти пи shy;сать про shy;ще, т.к. мне час shy;то при shy;хо shy;дит shy;ся чи shy;тать чу shy;жой код, са shy;мо shy;го раз shy;но shy;го уров shy;ня и на са shy;мых раз shy;ных, в том чис shy;ле не shy;из shy;вес shy;т shy;ных мне, язы shy;ках.
Крат shy;ко о язы shy;ке
Итак язык C# вы shy;рос из C++, сох shy;ра shy;нив ос shy;нов shy;ные осо shy;бен shy;нос shy;ти син shy;так shy;си shy;са и опе shy;ра shy;то shy;ры. Да и ос shy;нов shy;ные опе shy;ра shy;то shy;ры оди shy;на shy;ко shy;вы во всех язы shy;ках, так что ес shy;ли вы зна shy;ете хоть один язык, то у вас не дол shy;ж shy;но воз shy;ни shy;кать воп shy;ро shy;са что та shy;кое for, if...then...else, do...whi shy;le и пр. Не са shy;мый рас shy;п shy;рос shy;т shy;ра shy;нен shy;ный опе shy;ра shy;тор ис shy;поль shy;зу shy;ющий shy;ся в C# - fo shy;re shy;ach. Соб shy;с shy;т shy;вен shy;но де shy;ла shy;ет то, что обоз shy;на shy;ча shy;ет - "for each = для каж shy;до shy;го", т.е. про shy;во shy;дит цикл для каж shy;до shy;го чле shy;на из мас shy;си shy;ва/кол shy;лек shy;ции/спис shy;ка.
Осо shy;бен shy;нос shy;тью всех С-по shy;доб shy;ных язы shy;ков яв shy;ля shy;ет shy;ся ог shy;ра shy;ни shy;чи shy;ва shy;ние бло shy;ков ко shy;да фи shy;гур shy;ны shy;ми скоб shy;ка shy;ми, в от shy;ли shy;чии от, нап shy;ри shy;мер, Ba shy;sic, в ко shy;то shy;ром все окон shy;ча shy;ния обоз shy;на shy;ча shy;ют shy;ся как End что-то (Sub, If и пр.). Ну и еще од shy;на осо shy;бен shy;ность - лю shy;бовь к сок shy;ра shy;ще shy;ни shy;ям все shy;го че shy;го толь shy;ко мож shy;но.
В .NET вце shy;лом по shy;яви shy;лось нес shy;коль shy;ко осо shy;бен shy;нос shy;тей - нап shy;ри shy;мер, из shy;чез shy;ли ос shy;нов shy;ные ти shy;пы дан shy;ных. Те shy;перь клю shy;че shy;вые сло shy;ва do shy;ub shy;le и int не пред shy;с shy;тав shy;ля shy;ют со shy;бой пос shy;ле shy;до shy;ва shy;тель shy;ность байт в па shy;мя shy;ти, а яв shy;ля shy;ют shy;ся крат shy;кой за shy;писью для System.Do shy;ub shy;le и System.Int32 (на 32-х раз shy;ряд shy;ных ма shy;ши shy;нах) со shy;от shy;вет shy;с shy;т shy;вен shy;но. По shy;яви shy;лись ин shy;тер shy;фей shy;сы, поз shy;во shy;ля shy;ющие опи shy;сать на shy;бор фун shy;к shy;ций shy;, не shy;об shy;хо shy;ди shy;мых для сов shy;мес shy;ти shy;мос shy;ти с ка shy;ким-ли shy;бо клас shy;сом, и еще мно shy;го че shy;го, в ос shy;нов shy;ном не нуж shy;но shy;го но shy;вич shy;кам.
И не на shy;до за shy;бы shy;вать, что в .NET сох shy;ра shy;не shy;на сис shy;те shy;ма win shy;dows со shy;об shy;ще shy;ний и со shy;бы shy;тий. Так что иметь пред shy;с shy;тав shy;ле shy;ние о том, как ра shy;бо shy;та shy;ет Win shy;dows опе shy;ра shy;ци shy;он shy;ка не shy;об shy;хо shy;ди shy;мо хо shy;тя бы на на shy;чаль shy;ном уров shy;не.
Осно shy;вы ра shy;бо shy;ты сис shy;те shy;мы
Спе shy;ци shy;алис shy;тов за shy;ра shy;нее про shy;шу не кри shy;вит shy;ся - я бу shy;ду пи shy;сать толь shy;ко о са shy;мых ос shy;но shy;вах и прос shy;тым язы shy;ком. То что нас ин shy;те shy;ре shy;су shy;ет - это сис shy;те shy;ма со shy;бы shy;тий (event) и их кон shy;т shy;ро shy;ля. Что бы ни про shy;изош shy;ло в ком shy;пе - дер shy;ну shy;лась мыш shy;ка, на shy;жа shy;ли кла shy;ви shy;шу или от shy;к shy;ры shy;ли ок shy;но - это прев shy;ра shy;ща shy;ет shy;ся в event. Event'ы бы shy;ва shy;ют раз shy;ные - на все слу shy;чаи жиз shy;ни. При же shy;ла shy;нии вам ник shy;то не ме shy;ша shy;ет сде shy;ла shy;ет свое со shy;бы shy;тие, впро shy;чем это до shy;воль shy;но ред shy;ко нуж shy;но, хо shy;тя уметь по shy;лез shy;но. Ког shy;да Event соз shy;дан - он рас shy;сы shy;ла shy;ет shy;ся всем за shy;ин shy;те shy;ре shy;со shy;ва shy;ным ли shy;цам :), сво shy;его ро shy;да рас shy;сыл shy;ка по ин shy;те shy;ре shy;сам. Ва shy;ша прог shy;рам shy;ма, ес shy;ли она хо shy;чет по shy;лу shy;чать ин shy;фор shy;ма shy;цию о ка shy;ких-то со shy;бы shy;ти shy;ях - дол shy;ж shy;на под shy;пи shy;сать shy;ся на них. Все до shy;воль shy;но прос shy;то:
Если вам на shy;до что shy;бы ва shy;ша прог shy;рам shy;ма по shy;лу shy;ча shy;ла ин shy;фор shy;ма shy;цию о со shy;бы shy;тии на shy;жа shy;тия кноп shy;ки - под shy;пи shy;ши shy;тесь:
Этой строч shy;кой вы вклю shy;ча shy;ете фун shy;к shy;цию "на shy;жа shy;лиК shy;ноп shy;ку" в спи shy;сок рас shy;сыл shy;ки ин shy;фор shy;ма shy;ции о со shy;бы shy;тии "Click" (на shy;жа shy;тие) для кноп shy;ки "кноп shy;ка1". Пом shy;нить на shy;до толь shy;ко об од shy;ном - лю shy;бые вла shy;дель shy;цы рас shy;сы shy;лок лю shy;ди хит shy;рые, кон shy;ку shy;рен shy;тов не лю shy;бят и рас shy;сы shy;ла shy;ют толь shy;ко "сво shy;им", что в пе shy;ре shy;во shy;де на прог shy;рам shy;ми shy;ро shy;ва shy;ние зна shy;чит - фун shy;к shy;ция, ко shy;то shy;рую вы вно shy;си shy;те в спи shy;сок дол shy;ж shy;на быть имен shy;но та shy;ко shy;го ви shy;да, ка shy;ко shy;го ждут в спис shy;ке, ина shy;че не при shy;мут. Пос shy;лед shy;ний мо shy;мент - Even shy;t shy;Han shy;d shy;ler - это пос shy;ред shy;ник меж shy;ду спис shy;ком рас shy;сыл shy;ки и по shy;лу shy;ча shy;те shy;лем, имен shy;но он дер shy;жит имя фун shy;к shy;ции, ко shy;то shy;рой на shy;до со shy;об shy;щить о со shy;бы shy;тии. Even shy;t shy;Han shy;d shy;ler'ов столь shy;ко же, сколь shy;ко и раз shy;ных event'ов, и он то shy;же дол shy;жен быть имен shy;но то shy;го ти shy;па, ко shy;то shy;рый ждут.
Как чи shy;тать чу shy;жой код
Ко shy;неч shy;но код бы shy;ва shy;ет раз shy;ный shy;, и что shy;бы чи shy;тать чу shy;жой код, ко shy;то shy;рый на shy;пи shy;сан на сла shy;боз shy;на shy;ко shy;мом язы shy;ке, без ком shy;мен shy;та shy;ри shy;ев и в неп shy;ри shy;выч shy;ной ма shy;не shy;ре нуж shy;но не толь shy;ко уме shy;ние, но и из shy;ряд shy;ная до shy;ля уда shy;чи и ин shy;ту shy;иции. Од shy;на shy;ко ес shy;ли код до shy;воль shy;но прос shy;той и на shy;пи shy;сан с ком shy;мен shy;та shy;ри shy;ями, хо shy;тя бы с ка shy;ки shy;ми-то, то про shy;чи shy;тать его проб shy;лем обыч shy;но не сос shy;тав shy;ля shy;ет. Боль shy;шой плюс C# в этом от shy;но shy;ше shy;нии, это воз shy;мож shy;ность вбить не shy;по shy;нят shy;ную строч shy;ку в Go shy;og shy;le или MSDN и поч shy;ти на shy;вер shy;ня shy;ка най shy;дет shy;ся при shy;мер с под shy;роб shy;ным опи shy;са shy;ни shy;ем, или что-то по shy;доб shy;ное. Боль shy;ше чем про C#, сре shy;ди .NET язы shy;ков, в се shy;ти толь shy;ко про VB на shy;пи shy;са shy;но.
Итак, раз shy;бор ко shy;да. Рас shy;смот shy;рим код внут shy;ри фун shy;к shy;ции, так как все ос shy;таль shy;ное обыч shy;но воп shy;ро shy;сов не вы shy;зы shy;ва shy;ет.
Код, как при shy;ви shy;ло, струк shy;ту shy;ри shy;ро shy;ван - или фор shy;ма shy;ти shy;ро shy;ван та shy;бу shy;ля shy;ци shy;ей shy;, или как-то ина shy;че (нап shy;ри shy;мер re shy;gi shy;on'ами). Очень час shy;то каж shy;дый блок име shy;ет ком shy;мен shy;та shy;рий shy;, опи shy;сы shy;ва shy;ющий про shy;из shy;во shy;ди shy;мую внут shy;ри опе shy;ра shy;цию - нап shy;ри shy;мер, "Чте shy;ние фай shy;ла", "За shy;пол shy;не shy;ние таб shy;ли shy;цы", "Под shy;бор раз shy;ме shy;ров". Та shy;ким об shy;ра shy;зом, мы зна shy;ет
да shy;же ес shy;ли вы по shy;ня shy;тия не име shy;ете что та shy;кое Enum, мож shy;но мно shy;гое по shy;нять из прос shy;то shy;го пе shy;ре shy;во shy;да: объ shy;ект Com shy;bo shy;Box (вы shy;па shy;да shy;ющее ок shy;но), его свой shy;ст shy;во Ис shy;точ shy;ник Дан shy;ных (Da shy;ta shy;So shy;ur shy;ce) при shy;рав shy;ни shy;ва shy;ет shy;ся че shy;му-то не shy;по shy;нят shy;но shy;му. Ло shy;гич shy;но пред shy;по shy;ло shy;жить, что ис shy;точ shy;ник дан shy;ных ука shy;зы shy;ва shy;ет на ка shy;ко shy;го-ли shy;бо ви shy;да спи shy;сок зна shy;че shy;ний. Фун shy;к shy;ция, пред shy;по shy;ло shy;жим не shy;из shy;вес shy;т shy;но shy;го, клас shy;са Enum на shy;зы shy;ва shy;ет shy;ся Get shy;Na shy;mes - по shy;лу shy;чить име shy;на, воз shy;в shy;ра shy;ща shy;ет она мас shy;сив строк, ко shy;то shy;рый и за shy;пол shy;нит вы shy;па shy;да shy;ющее ок shy;но зна shy;че shy;ни shy;ями.
Под shy;ве shy;дем ито shy;ги - ни shy;че shy;го тол shy;ком по shy;лез shy;но shy;го я не ска shy;зал. Все мои со shy;ве shy;ты мож shy;но свес shy;ти к трем фра shy;зам:
1. вни shy;ма shy;тель shy;но чи shy;тай shy;те код
2. учи shy;те ан shy;г shy;лий shy;ский shy;, кто не зна shy;ет
3. поль shy;зуй shy;тесь справ shy;кой (MSDN) и Go shy;og shy;le'ом.
Гла shy;ва 2. Синтаксис деклараций.
Вто shy;рая по shy;пыт shy;ка на shy;пи shy;сать что-то по shy;лез shy;ное для сов shy;сем на shy;чи shy;на shy;ющих в С#.
Чуть-чуть о струк shy;ту shy;ре ко shy;да: вер shy;х shy;ним эле shy;мен shy;том струк shy;ту shy;ры яв shy;ля shy;ют shy;ся прос shy;т shy;ран shy;с shy;т shy;ва имен (na shy;mes shy;pa shy;ce), до shy;воль shy;но фик shy;тив shy;ная вешь, приз shy;ван shy;ная упо shy;ря shy;до shy;чить ту ку shy;чу клас shy;сов, спис shy;ков, ин shy;тер shy;фей shy;сов и кон shy;с shy;тант, ко shy;то shy;рые уже су shy;щес shy;т shy;ву shy;ют и бу shy;дут соз shy;да shy;вать shy;ся. В na shy;mes shy;pa shy;ce мо shy;гут вхо shy;дить дру shy;гие na shy;mes shy;pa shy;ce, клас shy;сы, enum, кон shy;с shy;тан shy;ты и ин shy;тер shy;фей shy;сы. Класс сос shy;то shy;ит из фун shy;к shy;ций shy;, пе shy;ре shy;мен shy;ных и кон shy;с shy;тант. По по shy;во shy;ду пе shy;ре shy;мен shy;ных - они мо shy;гут быть объ shy;яв shy;ле shy;ны на лю shy;бом уров shy;не, и су shy;щес shy;т shy;во shy;вать бу shy;дут толь shy;ко в пре shy;де shy;лах (и во вре shy;мя жиз shy;ни) то shy;го бло shy;ка, в ко shy;то shy;ром объ shy;яв shy;ле shy;ны. Нап shy;ри shy;мер: пе shy;ре shy;мен shy;ная объ shy;яв shy;лен shy;ная в клас shy;се дос shy;туп shy;на для все shy;го клас shy;са, час shy;то для дру shy;гих клас shy;сов, жи shy;вет все вре shy;мя, по shy;ка жив класс (если он ста shy;тич shy;ный shy;) или объ shy;ект клас shy;са (если не ста shy;тич shy;ный shy;). Дру shy;гой при shy;мер: пе shy;ре shy;мен shy;ная объ shy;яв shy;лен shy;ная в пре shy;де shy;лах бло shy;ка if { }, ко shy;то shy;рый на shy;хо shy;дит shy;ся внут shy;ри бло shy;ка for { }, ко shy;то shy;рый на shy;хо shy;дит shy;ся внут shy;ри фун shy;к shy;ции клас shy;са... та shy;кая пе shy;ре shy;мен shy;ная бу shy;дет дос shy;туп shy;на толь shy;ко в пре shy;де shy;лах бло shy;ка if {}, в ко shy;то shy;ром объ shy;яв shy;ле shy;на и бу shy;дет жить по shy;ка не за shy;кон shy;чит shy;ся вы shy;пол shy;не shy;ние бло shy;ка, т.е. да shy;же до кон shy;ца фун shy;к shy;ции не до shy;жи shy;вет.
О том, что та shy;кое ста shy;ти shy;чес shy;кий класс, что зна shy;чит пе shy;ре shy;мен shy;ная объ shy;яв shy;ле shy;на и пр - чи shy;тай shy;те ни shy;же.
Син shy;так shy;сис дек shy;ла shy;ра shy;ций
Дек shy;ла shy;ра shy;ции - или объ shy;яв shy;ле shy;ния - это оп shy;ре shy;де shy;ле shy;ние име shy;ни и фор shy;ми shy;ро shy;ва shy;ние ти shy;па, прик shy;реп shy;ля shy;емо shy;го к это shy;му име shy;ни. Т.е. ес shy;ли вам нуж shy;но мес shy;то для хра shy;не shy;ния це shy;ло shy;го чис shy;ла, вы дол shy;ж shy;ны объ shy;явить пе shy;ре shy;мен shy;ную, с по shy;нят shy;ным вам име shy;нем, ти shy;па дан shy;ных це shy;лое (int). К сло shy;ву, int = in shy;te shy;ger = це shy;лое чис shy;ло. И пом shy;ни shy;те, дек shy;ла shy;ра shy;ция не соз shy;да shy;ет объ shy;ект и не вы shy;де shy;ля shy;ет па shy;мять - это толь shy;ко зак shy;реп shy;ле shy;ние име shy;ни за ти shy;пом. Для соз shy;да shy;ния дек shy;ла shy;ри shy;ро shy;ван shy;но shy;го объ shy;ек shy;та не shy;об shy;хо shy;ди shy;мо его ини shy;ци shy;али shy;зи shy;ро shy;вать (или оп shy;ре shy;де shy;лить), т.е. ли shy;бо прис shy;во shy;ить на shy;чаль shy;ное зна shy;че shy;ние, ли shy;бо за shy;пус shy;тить кон shy;с shy;т shy;рук shy;тор.
Дек shy;ла shy;ра shy;ция клас shy;сов, фун shy;к shy;ций и пе shy;ре shy;мен shy;ных на уров shy;не клас shy;са тре shy;бу shy;ет ука shy;за shy;ния мо shy;ди shy;фи shy;ка shy;то shy;ра дос shy;ту shy;па. Впро shy;чем, ес shy;ли не ука shy;зы shy;вать бу shy;дет ис shy;поль shy;зо shy;ван стан shy;дар shy;т shy;ный shy;, обыч shy;но pri shy;va shy;te. Мо shy;ди shy;фи shy;ка shy;то shy;ры дос shy;ту shy;па - это клю shy;че shy;вые сло shy;ва, оп shy;ре shy;де shy;ля shy;ющие, от shy;ку shy;да мож shy;но бу shy;дет по shy;лу shy;чить дос shy;туп к дек shy;ла shy;ри shy;ро shy;ван shy;ной пе shy;ре shy;мен shy;ной shy;/фун shy;к shy;ции и пр. Их все shy;го нес shy;коль shy;ко:
pri shy;va shy;te - дос shy;туп воз shy;мо shy;жен толь shy;ко из shy;нут shy;ри клас shy;са, в ко shy;то shy;ром объ shy;яв shy;ле shy;на.
pro shy;tec shy;ted - дос shy;туп воз shy;мо shy;жен из это shy;го клас shy;са и всех нас shy;лед shy;ни shy;ков.
inter shy;nal - дос shy;туп воз shy;мо shy;жен из всей as shy;sembly (сбор shy;ки/биб shy;ли shy;оте shy;ки, фай shy;ла ко shy;ро shy;че). Так shy;же при shy;ме shy;ня shy;ет shy;ся для клас shy;сов, enum и ин shy;тер shy;фей shy;сов.
pub shy;lic - дос shy;туп воз shy;мо shy;жен от shy;ку shy;да угод shy;но. Так shy;же при shy;ме shy;ня shy;ет shy;ся для клас shy;сов, enum и ин shy;тер shy;фей shy;сов.
Есть еще мо shy;ди shy;фи shy;ка shy;то shy;ры сос shy;то shy;яния, оп shy;ре shy;де shy;ля shy;ющие прин shy;ци shy;пи shy;аль shy;ное сос shy;то shy;яние фун shy;к shy;ций shy;:
sta shy;tic - фун shy;к shy;ция ста shy;тич shy;на, т.е. воз shy;мож shy;но ее ис shy;пол shy;не shy;ние без соз shy;да shy;ния объ shy;ек shy;та клас shy;са. Нап shy;ри shy;мер, фун shy;к shy;ции клас shy;са System.Math - ста shy;тич shy;ные, пос shy;коль shy;ку вы shy;пол shy;ня shy;ют shy;ся прос shy;тым вы shy;зо shy;вом, без соз shy;да shy;ния объ shy;ек shy;та клас shy;са Math. Так shy;же при shy;ме shy;ня shy;ет shy;ся для клас shy;сов, тог shy;да все вхо shy;дя shy;щие в не shy;го фун shy;к shy;ции и пе shy;ре shy;мен shy;ные дол shy;ж shy;ны быть sta shy;tic.
abstract - фун shy;к shy;ция толь shy;ко дек shy;ла shy;ри shy;ро shy;ва shy;на, а оп shy;ре shy;де shy;ле shy;ние фун shy;к shy;ции дол shy;ж shy;но быть в клас shy;сах нас shy;лед shy;ни shy;ках. Ис shy;поль shy;зу shy;ет shy;ся для соз shy;да shy;ния шаб shy;ло shy;на клас shy;са, все нас shy;лед shy;ни shy;ки ко shy;то shy;ро shy;го обя shy;за shy;тель shy;но име shy;ют не shy;кий на shy;бор фун shy;к shy;ций. Мо shy;жет су shy;щес shy;т shy;во shy;вать толь shy;ко в ab shy;s shy;t shy;ract клас shy;се. Так shy;же при shy;ме shy;ня shy;ет shy;ся для клас shy;сов.
vir shy;tu shy;al - фун shy;к shy;цию мож shy;но пе shy;ре shy;оп shy;ре shy;де shy;лить в клас shy;се нас shy;лед shy;ни shy;ке.
over shy;ri shy;de - ис shy;поль shy;зу shy;ет shy;ся для ука shy;за shy;ния, что опи shy;сы shy;ва shy;емая фун shy;к shy;ция пе shy;ре shy;оп shy;ре shy;де shy;ля shy;ет ро shy;ди shy;тель shy;с shy;кую.
Мо shy;ди shy;фи shy;ка shy;тор дос shy;ту shy;па для фун shy;к shy;ции/пе shy;ре shy;мен shy;ной внут shy;ри клас shy;са не мо shy;жет быть бо shy;лее дос shy;туп shy;ным, не shy;же shy;ли мо shy;ди shy;фи shy;ка shy;тор дос shy;ту shy;па все shy;го клас shy;са.
Пе shy;ре shy;мен shy;ные, дек shy;ла shy;ри shy;ру shy;емые внут shy;ри фун shy;к shy;ций мо shy;ди shy;фи shy;ка shy;то shy;ра дос shy;ту shy;па не тре shy;бу shy;ют.
Дек shy;ла shy;ра shy;ция пе shy;ре shy;мен shy;ных обя shy;за shy;тель shy;но сос shy;то shy;ит из ти shy;па дан shy;ных и име shy;ни, ос shy;таль shy;ное - по си shy;ту shy;ации и же shy;ла shy;нию.
При shy;ме shy;ры дек shy;ла shy;ра shy;ций пе shy;ре shy;мен shy;ных:
Дек shy;ла shy;ра shy;ция фун shy;к shy;ций обя shy;за shy;тель shy;но сос shy;то shy;ит из ти shy;па воз shy;в shy;ра shy;ща shy;емых дан shy;ных, име shy;ни и спис shy;ка ар shy;гу shy;мен shy;тов, ос shy;таль shy;ное - по си shy;ту shy;ации. Воз shy;ра shy;ща shy;емым ти shy;пом дан shy;ных мо shy;жет быть vo shy;id - пус shy;той - т.е. нет воз shy;в shy;ра shy;ща shy;емых дан shy;ных. Спи shy;сок ар shy;гу shy;мен shy;тов то shy;же мо shy;жет быть пус shy;тым. Фун shy;к shy;ции, в от shy;ли shy;чии от пе shy;ре shy;мен shy;ных, не мо shy;гут быть толь shy;ко дек shy;ла shy;ри shy;ро shy;ва shy;ны - они обя shy;за shy;тель shy;но сра shy;зу оп shy;ре shy;де shy;ля shy;ют shy;ся. Един shy;с shy;т shy;вен shy;ное ис shy;к shy;лю shy;че shy;ние - тип фун shy;к shy;ций ab shy;s shy;t shy;ract, они толь shy;ко дек shy;ла shy;ри shy;ру shy;ют shy;ся, а оп shy;ре shy;де shy;ля shy;ют shy;ся уже в клас shy;сах нас shy;лед shy;ни shy;ках.
При shy;ме shy;ры дек shy;ла shy;ра shy;ций и оп shy;ре shy;де shy;ле shy;ния фун shy;к shy;ций shy;:
Дек shy;ла shy;ра shy;ция клас shy;са мо shy;жет вклю shy;чать ука shy;за shy;ние клас shy;са ро shy;ди shy;те shy;ля, че shy;рез дво shy;ето shy;чие, да shy;лее че shy;рез за shy;пя shy;тую - под shy;к shy;лю shy;чен shy;ные ин shy;тер shy;фей shy;сы. Ин shy;тер shy;фей shy;с - спи shy;сок фун shy;к shy;ций. В ка shy;ком-то кри shy;вом смыс shy;ле - ро shy;ди shy;тель shy;с shy;кий класс, ко shy;то shy;рый мож shy;но про shy;из shy;воль shy;но при shy;ле shy;пить ку shy;да угод shy;но. Та shy;ким об shy;ра shy;зом по shy;лу shy;ча shy;ют shy;ся клас shy;сы, от раз shy;ных ро shy;ди shy;те shy;лей shy;, но под shy;дер shy;жи shy;ва shy;ющие од shy;ни и те же опе shy;ра shy;ции. До shy;воль shy;но удоб shy;ная вещь.
При shy;мер дек shy;ла shy;ра shy;ции клас shy;са:
Дек shy;ла shy;ра shy;ция кон shy;с shy;т shy;рук shy;то shy;ра клас shy;са мо shy;жет вклю shy;чать ука shy;за shy;ние на дру shy;гой кон shy;с shy;т shy;рук shy;тор, ко shy;то shy;рый дол shy;жен быть за shy;пу shy;щен до дек shy;ла shy;ри shy;ру shy;емо shy;го, нап shy;ри shy;мер, кон shy;с shy;т shy;рук shy;тор ро shy;ди shy;тель shy;с shy;ко shy;го клас shy;са:
И пос shy;лед shy;нее - дек shy;ла shy;ра shy;ция Enum. Enum = enu shy;me shy;ra shy;ti shy;on = пе shy;ре shy;чис shy;ле shy;ние. Спи shy;сок зна shy;че shy;ний. Соз shy;да shy;ет shy;ся для двух це shy;лей shy;: его мож shy;но ис shy;поль shy;зо shy;вать прог shy;рам shy;мис shy;ту - свя shy;зать спи shy;сок це shy;ло shy;чис shy;лен shy;ных зна shy;че shy;ний с по shy;нят shy;ны shy;ми сло shy;ва shy;ми, и поль shy;зо shy;вать shy;ся сло shy;ва shy;ми, а не чис shy;ла shy;ми, в ко shy;то shy;рых лег shy;ко за shy;пу shy;тать shy;ся; его мож shy;но ис shy;поль shy;зо shy;вать поль shy;зо shy;ва shy;те shy;лям - име shy;на зна shy;че shy;ний в спис shy;ке мож shy;но лег shy;ко вы shy;вес shy;ти на поль shy;зо shy;ва shy;те shy;ля.
При shy;мер дек shy;ла shy;ра shy;ции Enum:
Гла shy;ва 3. Синтаксис деклараций массивов, свойств, делегатов. Assembly.
Мас shy;си shy;вы
Итак, мас shy;сив - на shy;бор объ shy;ек shy;тов од shy;но shy;го ти shy;па, име shy;ющий чет shy;кую пос shy;ле shy;до shy;ва shy;тель shy;ность этих объ shy;ек shy;тов и стро shy;го за shy;дан shy;ный раз shy;мер, т.е. ко shy;ли shy;чес shy;т shy;во объ shy;ек shy;тов в на shy;бо shy;ре. Мас shy;сив мо shy;жет быть лю shy;бо shy;го ти shy;па, раз shy;мер мас shy;си shy;ва дол shy;жен быть боль shy;ше 0 и мень shy;ше чем мак shy;си shy;маль shy;ное зна shy;че shy;ние int (на 32 раз shy;ряд shy;ных ма shy;ши shy;нах - 2^32=4294967296).
Дек shy;ла shy;ра shy;ция мас shy;си shy;ва по shy;доб shy;на дек shy;ла shy;ра shy;ции пе shy;ре shy;мен shy;ной shy;, с од shy;ним толь shy;ко из shy;ме shy;не shy;ни shy;ем - пос shy;ле ти shy;па дек shy;ла shy;ри shy;ру shy;емо shy;го мас shy;си shy;ва до shy;бав shy;ля shy;ют shy;ся квад shy;рат shy;ные скоб shy;ки - [].
При shy;мер:
В строч shy;ке вы shy;ше по shy;ка shy;за shy;на дек shy;ла shy;ра shy;ция од shy;но shy;мер shy;но shy;го мас shy;си shy;ва ти shy;па int. Мас shy;сив мо shy;жет быть мно shy;го shy;мер shy;ным. При shy;чем в .NET мно shy;го shy;мер shy;ность мо shy;жет быть раз shy;ной.
Ва shy;ри shy;ант 1 - мно shy;го shy;мер shy;ный мас shy;сив ста shy;ро shy;го об shy;раз shy;ца, так на shy;зы shy;ва shy;емый мас shy;сив-мас shy;си shy;вов:
Сис shy;те shy;ма прос shy;тая - каж shy;дая скоб shy;ка соз shy;да shy;ет свой мас shy;сив. Т.е. мож shy;но пред shy;с shy;та shy;вить это в та shy;ком ви shy;де: (int[])[] ar shy;ray shy;Na shy;me - мас shy;сив ти shy;па int[], ко shy;то shy;рый то shy;же яв shy;ля shy;ет shy;ся мас shy;си shy;вом. По shy;доб shy;ных вло shy;же shy;ний мо shy;жет быть нес shy;коль shy;ко.
Ва shy;ри shy;ант 2 - мно shy;го shy;мер shy;ный мас shy;сив .NET:
Внут shy;ри скоб shy;ки ста shy;вит shy;ся нуж shy;ное ко shy;ли shy;чес shy;т shy;во за shy;пя shy;тых, каж shy;дая за shy;пя shy;тая соз shy;да shy;ет плюс од shy;но из shy;ме shy;ре shy;ние мас shy;си shy;ва. Т.е. в при shy;ве shy;ден shy;ной вы shy;ше строч shy;ке дек shy;ла shy;ри shy;ру shy;ет shy;ся таб shy;ли shy;ца (дву shy;мер shy;ный мас shy;сив) для це shy;ло shy;чис shy;лен shy;ных дан shy;ных.
У каж shy;до shy;го ва shy;ри shy;ан shy;та есть свои плю shy;сы и свои ми shy;ну shy;сы. Ес shy;ли ко shy;рот shy;ко - вто shy;рой ва shy;ри shy;ант удоб shy;нее и чуть быс shy;т shy;рее ра shy;бо shy;та shy;ет, за shy;то пер shy;вый ва shy;ри shy;ант поз shy;во shy;ля shy;ет раз shy;де shy;лять мас shy;сив на сос shy;тав shy;ля shy;ющие при не shy;об shy;хо shy;ди shy;мос shy;ти. При shy;ме shy;ры ис shy;поль shy;зо shy;ва shy;ния мас shy;си shy;вов бу shy;дут по shy;том.
Свой shy;ст shy;ва
Свой shy;ст shy;ва - спе shy;ци shy;аль shy;ная фи shy;ча для воз shy;мож shy;нос shy;ти про shy;вер shy;ки дан shy;ных, вво shy;ди shy;мых в пе shy;ре shy;мен shy;ную и за shy;да shy;ния ка shy;ких-ли shy;бо дей shy;ст shy;вий при из shy;ме shy;не shy;нии зна shy;че shy;ния. Сво shy;его ро shy;да пос shy;ред shy;ник меж shy;ду пе shy;ре shy;мен shy;ной и про shy;чим ко shy;дом, а по сов shy;мес shy;ти shy;тель shy;с shy;т shy;ву - ох shy;ран shy;ник и сек shy;ре shy;тарь этой пе shy;ре shy;мен shy;ной :). Свой shy;ст shy;ва су shy;щес shy;т shy;ву shy;ют толь shy;ко внут shy;ри клас shy;са, вмес shy;те с пе shy;ре shy;мен shy;ны shy;ми уров shy;ня клас shy;са.
За shy;да shy;ют shy;ся очень прос shy;то:
Сна shy;ча shy;ла, как обыч shy;но, мо shy;ди shy;фи shy;ка shy;тор дос shy;ту shy;па. Клю shy;че shy;вое сло shy;во pro shy;perty ука shy;зы shy;ва shy;ет, что дек shy;ла shy;ри shy;ру shy;ет shy;ся свой shy;ст shy;во. Да shy;лее ука shy;зы shy;ва shy;ет shy;ся тип дан shy;ных, в при shy;ме shy;ре - оди shy;нар shy;ное дроб shy;ное. За shy;тем имя свой shy;ст shy;ва и от shy;к shy;ры shy;ва shy;ет shy;ся фи shy;гур shy;ная скоб shy;ка, на shy;чи shy;на shy;ющая блок опи shy;са shy;ния. Лю shy;бое свой shy;ст shy;во дол shy;ж shy;но иметь блок get - по shy;лу shy;чить. Ес shy;ли свой shy;ст shy;во толь shy;ко-для-чте shy;ния, оно не име shy;ет бло shy;ка set - ус shy;та shy;но shy;вить. В каж shy;дом бло shy;ке про shy;пи shy;сы shy;ва shy;ет shy;ся, что на shy;до сде shy;лать. Пом shy;ни shy;те, что свой shy;ст shy;во не хра shy;нит дан shy;ные, т.к. не яв shy;ля shy;ет shy;ся пе shy;ре shy;мен shy;ной - оно лишь пос shy;ред shy;ник, по shy;это shy;му в бло shy;ке get ука shy;за shy;но - вер shy;нуть зна shy;че shy;ние пе shy;ре shy;мен shy;ной _si shy;ze, в ко shy;то shy;рой зна shy;че shy;ние хра shy;нит shy;ся ре shy;аль shy;но. В бло shy;ке set на shy;пи shy;са shy;но, что де shy;лать при ус shy;та shy;нов shy;ке но shy;во shy;го зна shy;че shy;ния - сна shy;ча shy;ла про shy;ве shy;рить на пра shy;виль shy;ность... ну, нап shy;ри shy;мер, что shy;бы вво shy;ди shy;ли от 0 до 1, ког shy;да нуж shy;но и т.п. Пос shy;ле про shy;вер shy;ки - ус shy;та shy;но shy;вить зна shy;че shy;ние; клю shy;че shy;вое сло shy;во va shy;lue, в дан shy;ном слу shy;чае, ука shy;зы shy;ва shy;ет на вхо shy;дя shy;щее зна shy;че shy;ние. Ну и под за shy;на shy;вес - вы shy;пол shy;нить со shy;бы shy;тие "раз shy;мер из shy;ме shy;нил shy;ся". За shy;вер shy;ша shy;ет дек shy;ла shy;ра shy;цию зак shy;ры shy;ва shy;юща shy;яся фи shy;гур shy;ная скоб shy;ка.
Свой shy;ст shy;ва поз shy;во shy;ля shy;ют соз shy;да shy;вать все пе shy;ре shy;мен shy;ные как pri shy;va shy;te, а нуж shy;ные для от shy;к shy;ры shy;то shy;го дос shy;ту shy;па вы shy;во shy;дить че shy;рез свой shy;ст shy;ва, имея та shy;ким об shy;ра shy;зом га shy;ран shy;тию, что лю shy;бое внеш shy;нее из shy;ме shy;не shy;ние зна shy;че shy;ния бу shy;дет про shy;ве shy;ре shy;но на пра shy;виль shy;ность.
Де shy;ле shy;га shy;ты
Де shy;ле shy;га shy;ты - ес shy;ли прос shy;то, то это ука shy;за shy;те shy;ли на фун shy;к shy;ции. Ес shy;ли вам на shy;до пе shy;ре shy;дать фун shy;к shy;цию как ар shy;гу shy;мент, то у вас два пу shy;ти - ли shy;бо че shy;рез стро shy;ко shy;вое наз shy;ва shy;ние фун shy;к shy;ции ис shy;кать ее в биб shy;ли shy;оте shy;ке (assembly) и вы shy;зы shy;вать как внеш shy;нюю фун shy;к shy;цию, ли shy;бо ис shy;поль shy;зо shy;вать де shy;ле shy;гат. Де shy;ле shy;гат поз shy;во shy;ля shy;ет оп shy;ре shy;де shy;лить под shy;пись фун shy;к shy;ции - т.е. воз shy;в shy;ра shy;ща shy;емый тип, ти shy;пы и ко shy;ли shy;чес shy;т shy;во ар shy;гу shy;мен shy;тов.
Де shy;ле shy;гат - это объ shy;ект уров shy;ня клас shy;са, соб shy;с shy;т shy;вен shy;но это и есть класс, толь shy;ко очень осо shy;бый. Од shy;на shy;ко дек shy;ла shy;ра shy;ция его очень по shy;хо shy;жа на дек shy;ла shy;ра shy;цию аб shy;с shy;т shy;рак shy;т shy;ной фун shy;к shy;ции:
Не за shy;бы shy;вай shy;те, что де shy;ле shy;гат - это класс, и для то shy;го, что shy;бы его мож shy;но бы shy;ло ис shy;поль shy;зо shy;вать, не shy;об shy;хо shy;ди shy;мо соз shy;дать объ shy;ект де shy;ле shy;га shy;та, ко shy;то shy;рый при shy;пи shy;сы shy;ва shy;ет shy;ся к кон shy;к shy;рет shy;ной фун shy;к shy;ции и даль shy;ше пе shy;ре shy;да shy;ет shy;ся, ес shy;ли ну shy;жен. У де shy;ле shy;га shy;та есть ме shy;тод In shy;vo shy;ke, ко shy;то shy;рый соб shy;с shy;т shy;вен shy;но и за shy;пус shy;ка shy;ет фун shy;к shy;цию, на ко shy;то shy;рую де shy;ле shy;гат ука shy;зы shy;ва shy;ет.
При shy;мер ис shy;поль shy;зо shy;ва shy;ния де shy;ле shy;га shy;та внут shy;ри фун shy;к shy;ции:
В при shy;ме shy;ре пред shy;по shy;ла shy;га shy;ет shy;ся, что d1 и d2 - пе shy;ре shy;мен shy;ные ти shy;па do shy;ub shy;le, a фун shy;к shy;ция MyFun shy;c shy;ti shy;on име shy;ет под shy;пись: do shy;ub shy;le MyFun shy;c shy;ti shy;on(do shy;ub shy;le d1, do shy;ub shy;le d2).
Assembly
Крат shy;ко: As shy;sembly = сбор shy;ка, файл, яв shy;ля shy;ющий shy;ся кон shy;тей shy;не shy;ром для na shy;mes shy;pa shy;ce/клас shy;сов/кон shy;с shy;тант/де shy;ле shy;га shy;тов/интер shy;фей shy;сов и ре shy;сур shy;сов (кар shy;ти shy;нок/тек shy;с shy;та/ико shy;нок и пр.). As shy;sembly мо shy;жет быть за shy;пус shy;к shy;ным (exe) или не за shy;пус shy;к shy;ным (dll). От shy;ли shy;чие толь shy;ко в том, что в за shy;пус shy;к shy;ном фай shy;ле про shy;пи shy;сан ме shy;тод Win shy;Ma shy;in (или ma shy;in для кон shy;соль shy;ных при shy;ло shy;же shy;ний shy;). Нес shy;мот shy;ря на рас shy;ши shy;ре shy;ния фай shy;ла, ни shy;че shy;го об shy;ще shy;го (кро shy;ме поль shy;зо shy;ва shy;тель shy;с shy;ко shy;го при shy;ме shy;не shy;ния) со ста shy;ры shy;ми (до .NET) фай shy;ла shy;ми не име shy;ет. Ос shy;нов shy;ные два от shy;ли shy;чия от win32 стан shy;дар shy;тов - as shy;sembly име shy;ет соб shy;с shy;т shy;вен shy;ное опи shy;са shy;ние внут shy;ри се shy;бя. Опи shy;са shy;ние вклю shy;ча shy;ет: вер shy;сию, ав shy;то shy;ра, па shy;ра shy;мет shy;ры бе shy;зо shy;пас shy;нос shy;ти не shy;об shy;хо shy;ди shy;мые для вы shy;пол shy;не shy;ния и мно shy;гое дру shy;гое, в час shy;т shy;нос shy;ти - опи shy;са shy;ние под shy;пи shy;сей всех фун shy;к shy;ций shy;, пе shy;ре shy;мен shy;ных и т.д. Т.е. не на shy;до знать за shy;ра shy;нее как вы shy;зы shy;вать ту или иную фун shy;к shy;цию из биб shy;ли shy;оте shy;ки - это мож shy;но уз shy;нать на ле shy;ту. Вто shy;рое от shy;ли shy;чие - as shy;sembly хра shy;нит код не в ви shy;де ас shy;сем shy;б shy;ле shy;ра, а в MSIL - Mic shy;ro shy;soft In shy;ter shy;me shy;di shy;ate Lan shy;gu shy;age - сво shy;е shy;об shy;раз shy;ный ме shy;та-язык, ко shy;то shy;рый ком shy;пи shy;ли shy;ру shy;ет shy;ся на ле shy;ту и по зап shy;ро shy;су (just-in-ti shy;me com shy;pi shy;ling and de shy;bug shy;ging) в со shy;от shy;вет shy;с shy;т shy;вии с тре shy;бо shy;ва shy;ни shy;ями сис shy;те shy;мы на ко shy;то shy;рой ком shy;пи shy;ли shy;ру shy;ет shy;ся (раз shy;ряд shy;ность про shy;цес shy;со shy;ра и т.д.). Плю shy;сы та shy;ко shy;го под shy;хо shy;да - кросс-плат shy;фор shy;мен shy;ность и кросс-сис shy;тем shy;ность, а так shy;же бе shy;зо shy;пас shy;ность вы shy;пол shy;не shy;ния. Ми shy;ну shy;сы - код всег shy;да от shy;к shy;рыт и дос shy;ту shy;пен лю shy;бо shy;му для проч shy;те shy;ния, а так shy;же ухо shy;дит вре shy;мя и ре shy;сур shy;сы на ком shy;пи shy;ля shy;цию. Впро shy;чем, кни shy;ги и му shy;зы shy;ку то shy;же мо shy;жет лю shy;бой про shy;чи shy;тать/услы shy;шать... и по shy;че shy;му-то ав shy;то shy;ров это не нап shy;ря shy;га shy;ет, а пла shy;ги shy;ато shy;ров не так уж мно shy;го...
Assembly мо shy;жет быть од shy;но shy;мо shy;дуль shy;ным и мно shy;го shy;мо shy;дуль shy;ным. Мо shy;дуль - часть as shy;sembly, как пра shy;ви shy;ло, до сбор shy;ки пред shy;с shy;тав shy;ля shy;ющая со shy;бой от shy;дель shy;ный файл. Т.е. нес shy;коль shy;ко биб shy;ли shy;отек клас shy;сов мож shy;но объ shy;еди shy;нить в од shy;ну as shy;sembly, и до shy;ба shy;вить еще кар shy;тин shy;ки до ку shy;чи. Каж shy;дая кар shy;тин shy;ка и каж shy;дая биб shy;ли shy;оте shy;ка бу shy;дут от shy;дель shy;ным мо shy;ду shy;лем внут shy;ри еди shy;ной as shy;sembly. Плю shy;сов в та shy;ком под shy;хо shy;де ма shy;ло shy;ва shy;то, по shy;это shy;му ред shy;ко ис shy;поль shy;зу shy;ет shy;ся. MS Vi shy;su shy;al Stu shy;dio да shy;же не име shy;ет воз shy;мож shy;нос shy;ти соз shy;да shy;вать муль shy;ти shy;мо shy;дуль shy;ные as shy;sembly в ин shy;тер shy;фей shy;сном ре shy;жи shy;ме.
Лич shy;но я от shy;но shy;шусь к as shy;sembly по ста shy;ро shy;му - как к exe и dll win32 стан shy;дар shy;та. Един shy;с shy;т shy;вен shy;ное, о чем при shy;хо shy;дит shy;ся пом shy;нить - as shy;sembly дол shy;ж shy;ны иметь иден shy;ти shy;фи shy;ка shy;то shy;ры, ес shy;ли ими со shy;би shy;ра shy;етесь поль shy;зо shy;вать shy;ся не вы один. Т.е. вер shy;сия, ав shy;тор и раз shy;ре shy;ше shy;ния бе shy;зо shy;пас shy;нос shy;ти дол shy;ж shy;ны быть про shy;пи shy;са shy;ны. Да и под shy;пи shy;сать as shy;sembly клю shy;чом strong na shy;me то shy;же нуж shy;но. Ключ strong na shy;me - уни shy;каль shy;ный иден shy;ти shy;фи shy;ка shy;тор as shy;sembly, ко shy;то shy;рый ис shy;поль shy;зу shy;ет shy;ся для рас shy;поз shy;на shy;ва shy;ния раз shy;ных as shy;sembly с од shy;ним име shy;нем на од shy;ной ма shy;ши shy;не. Для под shy;пи shy;сы shy;ва shy;ния есть кон shy;соль shy;ная ути shy;ли shy;та sn.exe, а в VS2005 есть и ин shy;тер shy;фей shy;сные оп shy;ции в свой shy;ст shy;вах про shy;ек shy;та для этой це shy;ли.
Если кто-то хо shy;чет ра shy;зоб shy;рать shy;ся под shy;роб shy;нее - есть неп shy;ло shy;хая статья (ку shy;сок кни shy;ги) на co shy;dep shy;ro shy;j shy;ect: ле shy;жит здесь - http://www.co shy;dep shy;ro shy;j shy;ect.com/bo shy;oks/1893115593_6.asp.
Глава 4. Основные операторы и конструкты.
Рас shy;смот shy;рев син shy;так shy;сис дек shy;ла shy;ра shy;ций shy;, пе shy;ре shy;хо shy;дим к ос shy;нов shy;ным кон shy;с shy;т shy;рук shy;там или ко shy;ман shy;дам язы shy;ка. Как из shy;вес shy;т shy;но, код внут shy;ри фун shy;к shy;ции вы shy;пол shy;ня shy;ет shy;ся пос shy;т shy;роч shy;но, ес shy;ли не ис shy;поль shy;зу shy;ют shy;ся ка shy;кие-ли shy;бо ко shy;ман shy;ды. Дру shy;ги shy;ми сло shy;ва shy;ми - ко shy;ман shy;ды язы shy;ка приз shy;ва shy;ны обес shy;пе shy;чить не shy;ли shy;ней shy;ность вы shy;пол shy;не shy;ния ко shy;да. Са shy;мая из shy;вес shy;т shy;ная из не-ли shy;ней shy;ных ко shy;манд - go shy;to - есть в язы shy;ке C#, од shy;на shy;ко я нас shy;то shy;ятель shy;но не ре shy;ко shy;мен shy;дую ей поль shy;зо shy;вать shy;ся. Ос shy;таль shy;ных ко shy;манд впол shy;не дос shy;та shy;точ shy;но, что shy;бы обес shy;пе shy;чить лю shy;бую не shy;ли shy;ней shy;ность, а при shy;вы shy;кать к go shy;to - это как пра shy;ви shy;ло оз shy;на shy;ча shy;ет при shy;выч shy;ку к пло shy;хой струк shy;ту shy;ри shy;за shy;ции ко shy;да.
Но сна shy;ча shy;ла, что shy;бы бы shy;ло про shy;ще по shy;ни shy;мать ко shy;ман shy;ды, рас shy;смот shy;рим не shy;ко shy;то shy;рые опе shy;ра shy;то shy;ры язы shy;ка.
Опе shy;ра shy;то shy;ры
Опе shy;ра shy;то shy;ры срав shy;не shy;ния:
‹ - стро shy;го мень shy;ше. Оп shy;ре shy;де shy;лен для лю shy;бых чис shy;ло shy;вых ти shy;пов (int, do shy;ub shy;le, short, byte, de shy;ci shy;mal, flo shy;at, bo shy;ol)
› - стро shy;го боль shy;ше. Ана shy;ло shy;гич shy;но пре shy;ды shy;ду shy;ще shy;му.
‹= - мень shy;ше или рав shy;но. Ана shy;ло shy;гич shy;но пре shy;ды shy;ду shy;ще shy;му.
›= - боль shy;ше или рав shy;но. Ана shy;ло shy;гич shy;но пре shy;ды shy;ду shy;ще shy;му.)
== - рав shy;но (экви shy;ва shy;лен shy;т shy;но). Оп shy;ре shy;де shy;лен для боль shy;шин shy;с shy;т shy;ва ти shy;пов и клас shy;сов. Для мно shy;гих клас shy;сов оз shy;на shy;ча shy;ет имен shy;но иден shy;тич shy;ность объ shy;ек shy;тов клас shy;са, а не ра shy;вен shy;с shy;т shy;во их внут shy;рен shy;них зна shy;че shy;ний.
!= - не рав shy;но. Ана shy;ло shy;гич shy;но пре shy;ды shy;ду shy;ще shy;му.
Обра shy;ти shy;те вни shy;ма shy;ние: про shy;вер shy;ка на ра shy;вен shy;с shy;т shy;во обоз shy;на shy;ча shy;ет shy;ся дву shy;мя зна shy;ка shy;ми рав shy;но! Од shy;ним зна shy;ком обоз shy;на shy;ча shy;ет shy;ся опе shy;ра shy;тор прис shy;во shy;ения зна shy;че shy;ния.
Ло shy;ги shy;чес shy;кие опе shy;ра shy;то shy;ры:
|| - ло shy;ги shy;чес shy;кое ИЛИ.
amp; amp; - ло shy;ги shy;чес shy;кое И.
! - ло shy;ги shy;чес shy;кое НЕ.
Ариф shy;ме shy;ти shy;чес shy;кие опе shy;ра shy;то shy;ры:
по shy;ми shy;мо стан shy;дар shy;т shy;ных +, -, *, / есть их мо shy;ди shy;фи shy;ка shy;ции со зна shy;ком рав shy;но: +=, -=, *=, /=. Оз shy;на shy;ча shy;ют "вы shy;пол shy;нить опе shy;ра shy;тор и при shy;рав shy;нять", т.е.
озна shy;ча shy;ет при shy;ба shy;вить 10 к зна shy;че shy;нию пе shy;ре shy;мен shy;ной i, и за shy;пи shy;сать ре shy;зуль shy;тат в нее же. Это ана shy;ло shy;гич shy;но за shy;пи shy;си:
есть еще два опе shy;ра shy;то shy;ра:
++ - при shy;ба shy;вить еди shy;ни shy;цу к пе shy;ре shy;мен shy;ной и за shy;пи shy;сать ре shy;зуль shy;тат в нее. Ин shy;к shy;ре shy;мен shy;т shy;ный опе shy;ра shy;тор.
-- - от shy;нять еди shy;ни shy;цу от зна shy;че shy;ния пе shy;ре shy;мен shy;ной и за shy;пи shy;сать ре shy;зуль shy;тат в нее. Дек shy;ре shy;мен shy;т shy;ный опе shy;ра shy;тор.
Основ shy;ные кон shy;с shy;т shy;рук shy;ты мож shy;но раз shy;де shy;лить на цик shy;ло shy;вые - поз shy;во shy;ля shy;ющие за shy;пус shy;кать ку shy;сок ко shy;да в цик shy;ле, и ус shy;лов shy;ные - поз shy;во shy;ля shy;ющие вы shy;пол shy;нять нуж shy;ный ку shy;сок ко shy;да, вы shy;би shy;ра shy;емый по ус shy;ло shy;вию. Я опи shy;шу ос shy;нов shy;ные кон shy;с shy;т shy;рук shy;ты, ес shy;ли ка shy;кой за shy;бу shy;ду, а вам он ин shy;те shy;ре shy;сен - пи shy;ши shy;те.
Цик shy;лы
Са shy;мый рас shy;п shy;рос shy;т shy;ра shy;нен shy;ный цикл - for. Смыс shy;ло shy;вое пред shy;наз shy;на shy;че shy;ние - вы shy;пол shy;нять пос shy;ле shy;до shy;ва shy;тель shy;ность дей shy;ст shy;вий за shy;дан shy;ное ко shy;ли shy;чес shy;т shy;во раз. За shy;да shy;ет shy;ся сле shy;ду shy;ющим об shy;ра shy;зом:
Пос shy;ле клю shy;че shy;во shy;го сло shy;ва for сле shy;ду shy;ет круг shy;лая скоб shy;ка, внут shy;ри кто shy;рой обя shy;за shy;тель shy;но при shy;сут shy;с shy;т shy;ву shy;ют три вы shy;ра shy;же shy;ния, раз shy;де shy;лен shy;ные точ shy;кой с за shy;пя shy;той. Пер shy;вое вы shy;ра shy;же shy;ние, в на shy;шем слу shy;чае "i=0" - опе shy;ра shy;ция, ко shy;то shy;рую на shy;до вы shy;пол shy;нить пе shy;ред на shy;ча shy;лом цик shy;ла. За shy;час shy;тую в этом мес shy;те пи shy;шут дек shy;ла shy;ра shy;цию пе shy;ре shy;мен shy;ной shy;, ко shy;то shy;рая су shy;щес shy;т shy;ву shy;ет толь shy;ко для цик shy;ла, тог shy;да вы shy;ра shy;же shy;ние выг shy;ля shy;дит, нап shy;ри shy;мер так: "int i = 0". С тем же ус shy;пе shy;хом по shy;ле мо shy;жет быть пус shy;тым. Вто shy;рое вы shy;ра shy;же shy;ние ус shy;та shy;нав shy;ли shy;ва shy;ет ус shy;ло shy;вие, при ко shy;то shy;ром цикл дол shy;жен про shy;дол shy;жать shy;ся... его мож shy;но рас shy;смат shy;ри shy;вать как "Про shy;дол shy;жать цикл по shy;ка вы shy;ра shy;же shy;ние 2 ис shy;тин shy;но". Мо shy;жет быть пус shy;тым, но тог shy;да вам са shy;мим при shy;дет shy;ся внут shy;ри цик shy;ла про shy;ве shy;рять ус shy;ло shy;вие вы shy;хо shy;да и са shy;мим же вы shy;хо shy;дить из цик shy;ла. Третье вы shy;ра shy;же shy;ние за shy;да shy;ет опе shy;ра shy;цию, ко shy;то shy;рую на shy;до вы shy;пол shy;нить по за shy;вер shy;ше shy;нии каж shy;до shy;го кру shy;га цик shy;ла. То shy;же мо shy;жет быть пус shy;тым.
Итак в строч shy;ке при shy;ме shy;ра по shy;ка shy;зан цикл, об shy;ну shy;ля shy;ющий пе shy;ре shy;мен shy;ную i вна shy;ча shy;ле, ис shy;пол shy;ня shy;ющий shy;ся по shy;ка пе shy;ре shy;мен shy;ная i мень shy;ше 10, пос shy;ле каж shy;до shy;го кру shy;га уве shy;ли shy;чи shy;ва shy;ющий i на 1, что да shy;ет 10 вы shy;пол shy;не shy;ний цик shy;ла, при нор shy;маль shy;ных ус shy;ло shy;ви shy;ях.
Для до shy;пол shy;ни shy;тель shy;но shy;го уп shy;рав shy;ле shy;ния вы shy;пол shy;не shy;ни shy;ем цик shy;ла пре shy;дус shy;мот shy;ре shy;ны еще два клю shy;че shy;вых сло shy;ва: con shy;ti shy;nue - за shy;вер shy;ша shy;ет те shy;ку shy;щий круг вы shy;пол shy;не shy;ния, bre shy;ak - за shy;вер shy;ша shy;ет цикл.
Цикл whi shy;le (быв shy;ший do...whi shy;le). Смыс shy;ло shy;вое пред shy;наз shy;на shy;че shy;ние - вы shy;пол shy;нять пос shy;ле shy;до shy;ва shy;тель shy;ность дей shy;ст shy;вий shy;, по shy;ка что-то не слу shy;чит shy;ся/изме shy;нит shy;ся.
за shy;да shy;ет shy;ся так:
Пос shy;ле клю shy;че shy;во shy;го сло shy;ва whi shy;le сле shy;ду shy;ет круг shy;лая скоб shy;ка, в ко shy;то shy;рой за shy;да shy;ет shy;ся ло shy;ги shy;чес shy;кое вы shy;ра shy;же shy;ние, про shy;ве shy;ря shy;емое на ис shy;тин shy;ность каж shy;дый круг цик shy;ла. Цикл вы shy;пол shy;ня shy;ет shy;ся по shy;ка вы shy;ра shy;же shy;ние ис shy;тин shy;но, или до клю shy;че shy;во shy;го сло shy;ва bre shy;ak, внут shy;ри цик shy;ла. Сло shy;во con shy;ti shy;nue при shy;ме shy;ни shy;мо к это shy;му цик shy;лу так же, как и к пре shy;ды shy;ду shy;ще shy;му.
Цикл fo shy;re shy;ach. Смыс shy;ло shy;вое пред shy;наз shy;на shy;че shy;ние - вы shy;пол shy;нить ку shy;сок ко shy;да для каж shy;до shy;го чле shy;на мас shy;си shy;ва/спис shy;ка/кол shy;лек shy;ции. В .NET по shy;яви shy;лись клас shy;сы обес shy;пе shy;чи shy;ва shy;ющие не shy;ну shy;ме shy;ро shy;ван shy;ные, ди shy;на shy;ми shy;чес shy;кие мас shy;си shy;вы. В ос shy;нов shy;ном для них и был сде shy;лан этот опе shy;ра shy;тор.
за shy;да shy;ет shy;ся так:
Пос shy;ле клю shy;че shy;во shy;го сло shy;ва fo shy;re shy;ach сле shy;ду shy;ет круг shy;лая скоб shy;ка в ко shy;то shy;рой за shy;да shy;ет shy;ся класс оди shy;ноч shy;но shy;го объ shy;ек shy;та, над ко shy;то shy;рым вы shy;пол shy;ня shy;ет shy;ся опе shy;ра shy;ция в ос shy;нов shy;ном бло shy;ке, имя объ shy;ек shy;та (пе shy;ре shy;мен shy;ной shy;) для об shy;ра shy;ще shy;ния в ос shy;нов shy;ном бло shy;ке, за shy;тем клю shy;че shy;вое сло shy;во in и имя пе shy;ре shy;мен shy;ной shy;, ука shy;зы shy;ва shy;ющее на мас shy;сив/спи shy;сок/кол shy;лек shy;цию объ shy;ек shy;тов то shy;го клас shy;са, ко shy;то shy;рый ука shy;за shy;ли в на shy;ча shy;ле ус shy;ло shy;вия. Ос shy;нов shy;ной код, как обыч shy;но, пи shy;шет shy;ся в фи shy;гур shy;ных скоб shy;ках.
Ну, нап shy;ри shy;мер, час shy;то встре shy;ча shy;ет shy;ся - цикл по всем фай shy;лам ка shy;ко shy;го-ли shy;бо ти shy;па в ка shy;та shy;ло shy;ге:
Усло shy;вия
Усло shy;вие if...else. Смыс shy;ло shy;вое пред shy;наз shy;на shy;че shy;ние - вы shy;пол shy;нить блок ко shy;да, толь shy;ко ес shy;ли ус shy;ло shy;вие ис shy;тин shy;но... с ва shy;ри shy;ан shy;том - ес shy;ли лож shy;но - вы shy;пол shy;нить дру shy;гой ку shy;сок ко shy;да.
за shy;да shy;ет shy;ся так:
Пос shy;ле клю shy;че shy;во shy;го сло shy;ва if сле shy;ду shy;ет ло shy;ги shy;чес shy;кое ус shy;ло shy;вие в круг shy;лых скоб shy;ках, при ис shy;тин shy;нос shy;ти ко shy;то shy;ро shy;го вы shy;пол shy;ня shy;ет shy;ся код, рас shy;по shy;ло shy;жен shy;ный в фи shy;гур shy;ных скоб shy;ках. Ес shy;ли ус shy;ло shy;вие лож shy;но - вы shy;пол shy;ня shy;ет shy;ся сле shy;ду shy;ющий блок. Сле shy;ду shy;ющий блок дол shy;жен на shy;чи shy;нать shy;ся с клю shy;че shy;во shy;го сло shy;ва el shy;se, за ко shy;то shy;рым мо shy;жет сле shy;до shy;вать сло shy;во if и еще од shy;но ус shy;ло shy;вие. Та shy;кая це shy;поч shy;ка мо shy;жет быть длин shy;ной shy;, но на shy;до пом shy;нить, что пос shy;ле вы shy;пол shy;не shy;ния хо shy;тя бы од shy;но shy;го бло shy;ка це shy;поч shy;ка пре shy;ры shy;ва shy;ет shy;ся.
При shy;мер:
В этом при shy;мер бу shy;дет вы shy;пол shy;не shy;на толь shy;ко фун shy;к shy;ция Do shy;So shy;met shy;hing2(). В пер shy;вом ус shy;ло shy;вии мы про shy;ве shy;ря shy;ем оба фла shy;га на ис shy;тин shy;ность, ес shy;ли хо shy;тя бы один не ра shy;вен ис shy;тин shy;но, пе shy;ре shy;хо shy;дим на вто shy;рой блок. Вто shy;рой блок то shy;же с ус shy;ло shy;ви shy;ем - про shy;ве shy;ря shy;ем пер shy;вый флаг на ис shy;тин shy;ность - мы точ shy;но зна shy;ем, что хо shy;тя бы один флаг ло shy;жен, ес shy;ли пер shy;вый ис shy;тин shy;нен - вто shy;рой ло shy;жен. Тре shy;тий блок - ес shy;ли пер shy;вый не ис shy;тин shy;нен, то ли shy;бо вто shy;рой ис shy;тин shy;нен, ли shy;бо оба лож shy;ны, но воз shy;мож shy;но нам это уже не важ shy;но...
При shy;мер 2:
В этом, край shy;не нег shy;ра shy;мот shy;ном при shy;ме shy;ре, то shy;же бу shy;дет вы shy;пол shy;не shy;на толь shy;ко фун shy;к shy;ция Do shy;So shy;met shy;hing2(). А гра shy;мот shy;но та shy;кую си shy;ту shy;ацию рас shy;пи shy;сы shy;вать че shy;рез опе shy;ра shy;тор switch;
Усло shy;вие swit shy;ch...ca shy;se. Смыс shy;ло shy;вое пред shy;наз shy;на shy;че shy;ние - вы shy;пол shy;нять кус shy;ки ко shy;да по зна shy;че shy;нию пе shy;ре shy;мен shy;ной. Сво shy;е shy;об shy;раз shy;ная раз shy;вил shy;ка (или пе shy;рек shy;лю shy;ча shy;тель). С до shy;пол shy;ни shy;тель shy;ным воз shy;мож shy;нос shy;тя shy;ми.
за shy;дет shy;ся так:
Пос shy;ле клю shy;че shy;во shy;го сло shy;ва switch сле shy;ду shy;ет имя пе shy;ре shy;мен shy;ной shy;, по чьему зна shy;че shy;нию нуж shy;но раз shy;вет shy;вить код. В фи shy;гур shy;ных скоб shy;ках за shy;да shy;ют shy;ся ва shy;ри shy;ан shy;ты зна shy;че shy;ний shy;, ко shy;то shy;рые дол shy;ж shy;ны об shy;ра shy;ба shy;ты shy;вать shy;ся. Ва shy;ри shy;ант зна shy;че shy;ния за shy;да shy;ет shy;ся как клю shy;че shy;вое сло shy;во ca shy;se, зна shy;че shy;ние пе shy;ре shy;мен shy;ной shy;, дво shy;ето shy;чие. Ес shy;ли фун shy;к shy;ци shy;ональ shy;ный блок за shy;кан shy;чи shy;ва shy;ет shy;ся сло shy;вом bre shy;ak - прог shy;рам shy;ма вы shy;хо shy;дит из бло shy;ка switch пос shy;ле не shy;го, ес shy;ли не за shy;кан shy;чи shy;ва shy;ет shy;ся - прог shy;рам shy;ма пе shy;ре shy;хо shy;дит на вы shy;пол shy;не shy;ние сле shy;ду shy;юще shy;го по по shy;ряд shy;ку бло shy;ка ca shy;se. клю shy;че shy;вое сло shy;во de shy;fa shy;ult на мес shy;те ca shy;se оз shy;на shy;ча shy;ет "все ва shy;ри shy;ан shy;ты".
При shy;мер:
В этом при shy;ме shy;ре бу shy;дут вы shy;пол shy;не shy;ны фун shy;к shy;ции Do shy;So shy;met shy;hing1() и Do shy;So shy;met shy;hing3().
Пе shy;ре shy;мен shy;ная мо shy;жет быть не чис shy;ло shy;вой shy;:
В этом при shy;ме shy;ре бу shy;дет вы shy;пол shy;не shy;на толь shy;ко фун shy;к shy;ция Do shy;Ex shy;c shy;la shy;ma shy;ti shy;on(), а ес shy;ли пе shy;ре shy;мен shy;ная с бу shy;дет рав shy;на не воп shy;ро shy;си shy;тель shy;но shy;му зна shy;ку и не вос shy;к shy;ли shy;ца shy;тель shy;но shy;му - ни shy;че shy;го сде shy;ла shy;но не бу shy;дет.
По по shy;во shy;ду на shy;хож shy;де shy;ния ос shy;нов shy;но shy;го ко shy;да внут shy;ри фи shy;гур shy;ных ско shy;бок - ес shy;ли код сос shy;то shy;ит из од shy;ной строч shy;ки, мож shy;но пи shy;сать его без фи shy;гур shy;ных ско shy;бок:
Гла shy;ва 5. Инициализация переменных. Коллекции. Типы данных.
Ини shy;ци shy;али shy;за shy;ция.
Я уже упо shy;ми shy;нал это сло shy;во, в та shy;ком при shy;мер shy;но кон shy;тек shy;с shy;те - Пос shy;ле дек shy;ла shy;ра shy;ции пе shy;ре shy;мен shy;ной shy;, пе shy;ред ее ис shy;поль shy;зо shy;ва shy;ни shy;ем, не shy;об shy;хо shy;ди shy;мо эту пе shy;ре shy;мен shy;ную ин shy;ци shy;али shy;зи shy;ро shy;вать. Поп shy;ро shy;бу shy;ем ра shy;зоб shy;рать shy;ся точ shy;нее: ини shy;ци shy;али shy;за shy;ция - про shy;цесс вы shy;де shy;ле shy;ния па shy;мя shy;ти под пе shy;ре shy;мен shy;ную и за shy;пол shy;не shy;ние этой па shy;мя shy;ти зна shy;че shy;ни shy;ями по умол shy;ча shy;нию. Зна shy;че shy;ния по умол shy;ча shy;нию - это, поч shy;ти всег shy;да, раз shy;ные фор shy;мы ну shy;ля: для int - 0, для do shy;ub shy;le - 0.0, для string - "", для bo shy;ol - fal shy;se и т. д.
Та часть, ко shy;то shy;рая ка shy;са shy;ет shy;ся вы shy;де shy;ле shy;ния па shy;мя shy;ти, это те shy;перь де shy;ло ком shy;пи shy;ля shy;то shy;ра и к прог shy;рам shy;мис shy;ту поч shy;ти не име shy;ет ни shy;ка shy;ко shy;го от shy;но shy;ше shy;ния. С точ shy;ки зре shy;ния прог shy;рам shy;мис shy;та, ини shy;ци shy;али shy;за shy;ция - пер shy;вое прис shy;во shy;ение зна shy;че shy;ния пе shy;ре shy;мен shy;ной.
Есть та shy;кая тон shy;кость - пе shy;ре shy;мен shy;ные, объ shy;яв shy;лен shy;ные на уров shy;не клас shy;са ини shy;ци shy;али shy;зи shy;ру shy;ют shy;ся ав shy;то shy;ма shy;ти shy;чес shy;ки при соз shy;да shy;нии объ shy;ек shy;та клас shy;са. Но это от shy;но shy;сит shy;ся толь shy;ко к ос shy;нов shy;ным ти shy;пам дан shy;ных (int, do shy;ub shy;le, bo shy;ol, byte и т. д.) кро shy;ме string. Все пе shy;ре shy;мен shy;ные клас shy;сов по shy;лу shy;ча shy;ют при ав shy;то shy;ма shy;ти shy;чес shy;кой ини shy;ци shy;али shy;за shy;ции зна shy;че shy;ние null и string то shy;же.
Ини shy;ци shy;али shy;за shy;ция бы shy;ва shy;ет двух ти shy;пов:
для прос shy;тых ти shy;пов дан shy;ных это прос shy;тое прис shy;во shy;ение зна shy;че shy;ния:
Все это ва shy;ри shy;ан shy;ты дек shy;ла shy;ра shy;ции с од shy;нов shy;ре shy;мен shy;ной ини shy;ци shy;али shy;за shy;ци shy;ей для прос shy;тых ти shy;пов дан shy;ных.
Вто shy;рой ва shy;ри shy;ант - ини shy;ци shy;али shy;за shy;ция объ shy;ек shy;та клас shy;са:
Обра shy;ти shy;те вни shy;ма shy;ние - мас shy;си shy;вы рас shy;смат shy;ри shy;ва shy;ют shy;ся как клас shy;сы.
Ини shy;ци shy;али shy;зи shy;ро shy;вать пе shy;ре shy;мен shy;ную мож shy;но поч shy;ти в лю shy;бой мо shy;мент - глав shy;ное, до пер shy;во shy;го об shy;ра shy;ще shy;ния. Та shy;кая за shy;пись впол shy;не до shy;пус shy;ти shy;ма:
И пос shy;лед shy;нее: ошиб shy;ка при ком shy;пи shy;ля shy;ции "Use of unas shy;sig shy;ned lo shy;cal va shy;ri shy;ab shy;le ..." зна shy;чит, что вы за shy;бы shy;ли ини shy;ци shy;али shy;зи shy;ро shy;вать пе shy;ре shy;мен shy;ную, дек shy;ла shy;ри shy;ро shy;ван shy;ную внут shy;ри фун shy;к shy;ции, а ошиб shy;ка "Null re shy;fe shy;ren shy;ce ex shy;cep shy;ti shy;on ..." при ра shy;бо shy;те прог shy;рам shy;мы оз shy;на shy;ча shy;ет, что вы за shy;бы shy;ли соз shy;дать объ shy;ект клас shy;са для пе shy;ре shy;мен shy;ной shy;, дек shy;ла shy;ри shy;ро shy;ван shy;ной на уров shy;не клас shy;са.
Кол shy;лек shy;ции/спис shy;ки и мас shy;си shy;вы
Что та shy;кое мас shy;си shy;вы мы уже рас shy;смот shy;ре shy;ли, те shy;перь рас shy;смот shy;рим та shy;кую вещь как кол shy;лек shy;цию/спи shy;сок и срав shy;ним.
Спи shy;сок - это лю shy;бой класс, ко shy;то shy;рый под shy;дер shy;жи shy;ва shy;ет ин shy;тер shy;фей shy;с IList, поз shy;во shy;ля shy;ющий соз shy;да shy;вать ди shy;на shy;ми shy;чес shy;кие мас shy;си shy;вы. Ди shy;на shy;ми shy;чес shy;кий мас shy;сив - на shy;бор объ shy;ек shy;тов од shy;но shy;го клас shy;са, с из shy;ме shy;ня shy;ющим shy;ся ко shy;ли shy;чес shy;т shy;вом и по shy;ряд shy;ком объ shy;ек shy;тов по хо shy;ду вы shy;пол shy;не shy;ния прог shy;рам shy;мы. Ба shy;зо shy;вый ин shy;тер shy;фей shy;с IList со shy;дер shy;жит фун shy;к shy;ции для до shy;бав shy;ле shy;ния но shy;во shy;го объ shy;ек shy;та к спис shy;ку, уби shy;ра shy;ния объ shy;ек shy;та из спис shy;ка, встав shy;ки объ shy;ек shy;та в спи shy;сок, по shy;ис shy;ка объ shy;ек shy;та и очис shy;т shy;ки спис shy;ка.
Кол shy;лек shy;ция - лю shy;бой класс по shy;рож shy;ден shy;ный от клас shy;са Col shy;lec shy;ti shy;on shy;Ba shy;se, обес shy;пе shy;чи shy;ва shy;юще shy;го фун shy;к shy;ции под shy;дер shy;ж shy;ки спис shy;ка. Класс Col shy;lec shy;ti shy;on shy;Ba shy;se под shy;дер shy;жи shy;ва shy;ет ин shy;тер shy;фей shy;с IList.
Есть мо shy;ди shy;фи shy;ка shy;ции этих двух клас shy;сов для соз shy;да shy;ния кол shy;лек shy;ций толь shy;ко-для-чте shy;ния, раз shy;но shy;ти shy;по shy;вых кол shy;лек shy;ций shy;, пар shy;ных мас shy;си shy;вов (хе shy;шей shy;) и пр.
Пре shy;иму shy;щес shy;т shy;ва спис shy;ков - ди shy;на shy;мич shy;ность вы shy;де shy;ля shy;емой па shy;мя shy;ти.
Пре shy;иму shy;щес shy;т shy;ва мас shy;си shy;вов - ско shy;рость.
Как поль shy;зо shy;вать shy;ся - ес shy;ли очень не лень, или очень на shy;до - мо shy;же shy;те всег shy;да соз shy;дать свой класс. Та shy;кой ва shy;ри shy;ант мы рас shy;смот shy;рим поз shy;же, ког shy;да бу shy;дем го shy;во shy;рить о нас shy;ле shy;до shy;ва shy;нии. Про shy;ще все shy;го поль shy;зо shy;вать shy;ся клас shy;сом Ar shy;ray shy;List:
Та shy;ким пу shy;тем мы до shy;ба shy;ви shy;ли са shy;мые раз shy;ные эле shy;мен shy;ты в спи shy;сок и мо shy;жем до лю shy;бо shy;го из них дос shy;ту shy;чать shy;ся как до эле shy;мен shy;та мас shy;си shy;ва:
s2 бу shy;дет рав shy;но "test". Есть толь shy;ко од shy;но не shy;удоб shy;с shy;т shy;во - Ar shy;ray shy;List всег shy;да воз shy;в shy;ра shy;ща shy;ет по shy;ме shy;щен shy;ный в не shy;го объ shy;ект как obj shy;ect, по shy;это shy;му для нор shy;маль shy;ной ра shy;бо shy;ты нуж shy;но пре shy;об shy;ра shy;зо shy;вы shy;вать воз shy;в shy;ра shy;ща shy;емое зна shy;че shy;ние в нуж shy;ный тип... что не всег shy;да прос shy;то. Имен shy;но это пре shy;об shy;ра shy;зо shy;ва shy;ние и со shy;вер shy;ша shy;ет сло shy;во string, сто shy;ящее в круг shy;лых скоб shy;ках пе shy;ред об shy;ра shy;ще shy;ни shy;ем al[2]. Под shy;роб shy;нее об этом - чуть ни shy;же.
Ти shy;пы дан shy;ных
У каж shy;дой пе shy;ре shy;мен shy;ной есть свой тип дан shy;ных или прос shy;то тип, то же мож shy;но ска shy;зать о воз shy;в shy;ра shy;ща shy;емом лю shy;бой фун shy;к shy;ци shy;ей зна shy;че shy;нии (vo shy;id то shy;же тип, хо shy;тя и осо shy;бый shy;). В .NET все ти shy;пы дан shy;ных яв shy;ля shy;ют shy;ся до shy;чер shy;ни shy;ми от Obj shy;ect, у ко shy;то shy;ро shy;го есть все shy;го 4 фун shy;к shy;ции, за shy;то 2 из них нуж shy;ны очень час shy;то:
Obj shy;ect.ToS shy;t shy;ring() - воз shy;в shy;ра shy;ща shy;ет стро shy;ко shy;вое пред shy;с shy;тав shy;ле shy;ние об объ shy;ек shy;те (для чи shy;сел - стро shy;ку с чис shy;лом, для слож shy;ных объ shy;ек shy;тов - не shy;кую стро shy;ку, опи shy;сы shy;ва shy;ющую глав shy;ную ин shy;фор shy;ма shy;цию объ shy;ек shy;та; нап shy;ри shy;мер Fi shy;le shy;In shy;fo - класс ин shy;фор shy;ма shy;ции о фай shy;ле - в ме shy;то shy;де ToS shy;t shy;ring() воз shy;в shy;ра shy;ща shy;ет пол shy;ный путь фай shy;ла.)
Obj shy;ect.Get shy;T shy;y shy;pe() - воз shy;в shy;ра shy;ща shy;ет объ shy;ект клас shy;са Type, опи shy;сы shy;ва shy;ющий тип дан shy;ных, ко shy;то shy;ро shy;му при shy;над shy;ле shy;жит ис shy;сле shy;ду shy;емый объ shy;ект.
Для срав shy;не shy;ния ти shy;пов есть спе shy;ци shy;аль shy;ный опе shy;ра shy;тор 'is'. Ис shy;поль shy;зу shy;ет shy;ся так:
вмес shy;то var - имя пе shy;ре shy;мен shy;ной shy;, вмес shy;то int - тип дан shy;ных (имя клас shy;са) с ко shy;то shy;рым вы хо shy;ти shy;те срав shy;нить.
Рас shy;смот shy;рим при shy;мер из пре shy;ды shy;ду shy;ще shy;го па shy;раг shy;ра shy;фа - у нас есть Ar shy;ray shy;List из 4 объ shy;ек shy;тов, 4 раз shy;ных ти shy;пов:
В этом при shy;ме shy;ре мы про shy;бе shy;га shy;ем цик shy;лом по спис shy;ку, смот shy;рим на тип оче shy;ред shy;ной пе shy;ре shy;мен shy;ной shy;, ес shy;ли это что-то прос shy;тое - пре shy;об shy;ра shy;зу shy;ем и что-то де shy;ла shy;ем, ес shy;ли нет - по shy;ка shy;зы shy;ва shy;ем в со shy;об shy;ще shy;нии стро shy;ко shy;вое пред shy;с shy;тав shy;ле shy;ние объ shy;ек shy;та.
Те shy;перь о пре shy;об shy;ра shy;зо shy;ва shy;нии. Пре shy;об shy;ра shy;зо shy;ва shy;ни shy;ем ти shy;пов дан shy;ных на shy;зы shy;ва shy;ют два раз shy;ных про shy;цес shy;са.
Один - это кон shy;вер shy;та shy;ция (Con shy;vert) - нас shy;то shy;ящая сме shy;на ти shy;па. Нап shy;ри shy;мер, прев shy;ра shy;тить do shy;ub shy;le в int - т.е. от shy;б shy;ро shy;сить дроб shy;ную часть, или ок shy;руг shy;лить до бли shy;жай shy;ше shy;го це shy;ло shy;го. Или, еще нап shy;ри shy;мер, прев shy;ра shy;тить do shy;ub shy;le в string - т.е. соз shy;дать стро shy;ку, где за shy;пи shy;са shy;но чис shy;ло, хра shy;ни shy;мое в пе shy;ре shy;мен shy;ной.
Вто shy;рой - это сме shy;на ти shy;па (cast) - без за shy;ме shy;ны дан shy;ных. Пе shy;ре shy;мен shy;ная ти shy;па obj shy;ect мо shy;жет на са shy;мом де shy;ле хра shy;нить лю shy;бой объ shy;ект, и что shy;бы ком shy;пи shy;ля shy;тор по shy;нял, что от не shy;го хо shy;тят - на shy;до пре shy;об shy;ра shy;зо shy;вы shy;вать. Бы shy;ва shy;ют и бо shy;лее слож shy;ные ве shy;щи.
Кон shy;вер shy;та shy;ция со shy;вер shy;ша shy;ет shy;ся всег shy;да че shy;рез фун shy;к shy;цию, ко shy;то shy;рая зна shy;ет, как имен shy;но на shy;до пре shy;об shy;ра shy;зо shy;вы shy;вать ти shy;пы. А все, что ка shy;са shy;ет shy;ся строк - на shy;до знать еще и нас shy;т shy;рой shy;ки куль shy;ту shy;ры для ко shy;то shy;рой ве shy;дет shy;ся пре shy;об shy;ра shy;зо shy;ва shy;ние. Есть спе shy;ци shy;аль shy;ный класс Con shy;vert, ко shy;то shy;рый ве shy;да shy;ет кон shy;вер shy;та shy;ци shy;ей. Им и ре shy;ко shy;мен shy;ду shy;ет shy;ся поль shy;зо shy;вать shy;ся.
s1 и s2 - оди shy;на shy;ко shy;вы.
Пре shy;об shy;ра shy;зо shy;ва shy;ние мо shy;жет быть: встро shy;ен shy;ным (impli shy;cit - не shy;яв shy;ным), над shy;с shy;т shy;ро shy;ен shy;ным (expli shy;cit - яв shy;ным) и еще од shy;ним :)... на shy;зо shy;вем его ус shy;лов shy;ным.
Встро shy;ен shy;ное - оно ли shy;бо есть, ли shy;бо нет. Обес shy;пе shy;чи shy;ва shy;ет shy;ся соз shy;да shy;те shy;лем клас shy;са. Т.е. нап shy;ри shy;мер int в do shy;ub shy;le пре shy;об shy;ра shy;зу shy;ет shy;ся лег shy;ко, са shy;мим ком shy;пи shy;ля shy;то shy;ром, а вот на shy;обо shy;рот - толь shy;ко че shy;ло shy;ве shy;ком.
Над shy;с shy;т shy;ро shy;ен shy;ное - это то, что пи shy;шет shy;ся в скоб shy;ках пе shy;ред име shy;нем пе shy;ре shy;мен shy;ной. Нап shy;ри shy;мер, мож shy;но вот так вот сде shy;лать:
Услов shy;ное ра shy;бо shy;та shy;ет толь shy;ко с объ shy;ек shy;та shy;ми клас shy;сов и не ра shy;бо shy;та shy;ет с прос shy;ты shy;ми ти shy;па shy;ми дан shy;ных, кро shy;ме string. Выг shy;ля shy;дит оно как опе shy;ра shy;тор 'as' - 'как' (рас shy;смат shy;ри shy;вать как).
Опе shy;ра shy;тор го shy;во shy;рит ком shy;пи shy;ля shy;то shy;ру, что под shy;со shy;вы shy;ва shy;емую ему пе shy;ре shy;мен shy;ную на shy;до рас shy;смат shy;ри shy;вать "как" ука shy;зан shy;ный тип дан shy;ных.
Гла shy;ва 6. Пример кода.
Итак, для пер shy;вой час shy;ти, я ду shy;маю дос shy;та shy;точ shy;но. С тем, что уже бы shy;ло рас shy;смот shy;ре shy;но, мож shy;но на shy;чи shy;нать прог shy;рам shy;ми shy;ро shy;вать, а зна shy;ющие дру shy;гой язык дол shy;ж shy;ны бы shy;ли уже по shy;лу shy;чить пред shy;с shy;тав shy;ле shy;ние о C#. Ос shy;та shy;лись не shy;рас shy;смот shy;рен shy;ны shy;ми еще мно shy;гие ве shy;щи, вклю shy;чая не shy;ко shy;то shy;рые из ос shy;нов shy;ных, но в си shy;лу то shy;го, что они нес shy;коль shy;ко слож shy;нее - я рас shy;смот shy;рю их в сле shy;ду shy;ющих гла shy;вах.
При shy;мер ко shy;да:
Для тес shy;т shy;ро shy;ва shy;ния - на shy;пи shy;шем еще та shy;кую фун shy;к shy;цию в лю shy;бом дру shy;гом na shy;mes shy;pa shy;ce... хоть в ос shy;нов shy;ном, соз shy;дан shy;ном ав shy;то shy;ма shy;ти shy;чес shy;ки при соз shy;да shy;нии про shy;ек shy;та:
Нем shy;но shy;го до shy;пол shy;не shy;ний и ком shy;мен shy;та shy;ри shy;ев:
Если у фун shy;к shy;ции есть мо shy;ди shy;фи shy;ка shy;тор over shy;ri shy;de - ее мож shy;но пе shy;ре shy;оп shy;ре shy;де shy;лять во всех до shy;чер shy;них клас shy;сах, лю shy;бо shy;го по shy;ко shy;ле shy;ния.
Если вы хо shy;ти shy;те сра shy;зу оп shy;ре shy;де shy;лить фун shy;к shy;цию, но дать ей воз shy;мож shy;ность быть пе shy;ре shy;оп shy;ре shy;де shy;лен shy;ной в нас shy;лед shy;ни shy;ках - прис shy;вой shy;те мо shy;ди shy;фи shy;ка shy;тор vir shy;tu shy;al.
Пос shy;ле shy;до shy;ва shy;тель shy;ное вы shy;пол shy;не shy;ние ус shy;ло shy;вий в switch бло shy;ке воз shy;мож shy;но толь shy;ко ес shy;ли ca shy;se ус shy;ло shy;вия оп shy;ре shy;де shy;ле shy;ны чис shy;ла shy;ми.
По по shy;во shy;ду плю shy;си shy;ка в име shy;ни ти shy;па Enum - Enum, по ло shy;ги shy;ке, на shy;до объ shy;яв shy;лять в na shy;mes shy;pa shy;ce, на shy;рав shy;не с клас shy;са shy;ми. Од shy;на shy;ко, мож shy;но их за shy;пи shy;хать и внутрь клас shy;са. Ес shy;ли их объ shy;явить в na shy;mes shy;pa shy;ce - имя ти shy;па бу shy;дет пос shy;т shy;ро shy;ено как обыч shy;но, а ес shy;ли внут shy;ри клас shy;са - то че shy;рез плю shy;сик.
Часть 2.
Чуть более сложные вещи в языке C# и платформе .NET.
Глава 1. Модификаторы аргументов. Регулярные выражения.
Рас shy;смот shy;рим мо shy;ди shy;фи shy;ка shy;то shy;ры ар shy;гу shy;мен shy;тов фун shy;к shy;ций.
При shy;мер:
При shy;мер:
Раз shy;ни shy;ца меж shy;ду ref и out толь shy;ко в том, что out не тре shy;бу shy;ет ини shy;ци shy;али shy;за shy;ции ар shy;гу shy;мен shy;та до вы shy;зо shy;ва фун shy;к shy;ции, а тре shy;бу shy;ет ее внут shy;ри фун shy;к shy;ции. ref - на shy;обо shy;рот, тре shy;бу shy;ет пе shy;ре shy;да shy;чи ини shy;ци shy;али shy;зи shy;ро shy;ван shy;но shy;го объ shy;ек shy;та.
Нап shy;ри shy;мер так:
Если вам не shy;об shy;хо shy;ди shy;мо, что shy;бы ар shy;гу shy;мен shy;ты бы shy;ли раз shy;но shy;тип shy;ны - счи shy;тай shy;те их ти shy;пом obj shy;ect. Еще один мо shy;мент - вмес shy;то спис shy;ка ар shy;гу shy;мен shy;тов в стро shy;ке, мож shy;но пе shy;ре shy;да shy;вать мас shy;сив... но тут на shy;до быть ос shy;то shy;рож shy;ным:
Ре shy;гу shy;ляр shy;ные вы shy;ра shy;же shy;ния
В об shy;щем ви shy;де ре shy;гу shy;ляр shy;ные вы shy;ра shy;же shy;ния ( = re shy;gu shy;lar ex shy;p shy;res shy;si shy;ons = Re shy;gEx) - это шаб shy;лон тек shy;с shy;то shy;вой стро shy;ки. Поч shy;ти все за shy;да shy;чи ка shy;са shy;ющи shy;еся по shy;ис shy;ка и за shy;ме shy;ны в стро shy;ках пред shy;поч shy;ти shy;тель shy;но ре shy;шать че shy;рез них. За shy;да shy;чи по shy;ис shy;ка и за shy;ме shy;ны вклю shy;ча shy;ют в се shy;бя по shy;иск тек shy;с shy;та, ре shy;дак shy;ти shy;ро shy;ва shy;ние тек shy;с shy;та, пре shy;об shy;ра shy;зо shy;ва shy;ние тек shy;с shy;та (фор shy;ма shy;ти shy;ро shy;ва shy;ние), вы shy;би shy;ра shy;ние по shy;лез shy;ной ин shy;фор shy;ма shy;ции из тек shy;с shy;та для пос shy;ле shy;ду shy;юще shy;го ис shy;поль shy;зо shy;ва shy;ния и пр. Поль shy;зо shy;вать shy;ся ре shy;гу shy;ляр shy;ны shy;ми вы shy;ра shy;же shy;ни shy;ями име shy;ет смысл ког shy;да объ shy;ем тек shy;с shy;та дос shy;та shy;точ shy;но ве shy;лик. Для ра shy;бо shy;ты с ре shy;гу shy;ляр shy;ны shy;ми вы shy;ра shy;же shy;ни shy;ями су shy;щес shy;т shy;ву shy;ет класс Re shy;gex (System.Text.Re shy;gu shy;la shy;rEx shy;p shy;res shy;si shy;ons.Re shy;gex).
Исполь shy;зо shy;вать shy;ся этот класс мо shy;жет тре shy;мя пу shy;тя shy;ми:
1. поль shy;зо shy;вать shy;ся ста shy;ти shy;чес shy;ки shy;ми ме shy;то shy;да shy;ми клас shy;са. Пред shy;поч shy;ти shy;тель shy;но, ес shy;ли прог shy;рам shy;ме это ред shy;ко нуж shy;но, и не при каж shy;дом за shy;пус shy;ке, а так shy;же, ес shy;ли са shy;мо вы shy;ра shy;же shy;ние ис shy;поль shy;зу shy;ет shy;ся толь shy;ко один раз под shy;ряд.
2. Соз shy;да shy;вать объ shy;ект клас shy;са re shy;gex в не shy;ком shy;пи shy;ли shy;ру shy;емом ви shy;де (флаг Com shy;pi shy;led не ус shy;та shy;нов shy;лен) и поль shy;зо shy;вать shy;ся его фун shy;к shy;ци shy;ями. Пред shy;поч shy;ти shy;тель shy;но ес shy;ли прог shy;рам shy;ме это ред shy;ко нуж shy;но, и не при каж shy;дом за shy;пус shy;ке, но вы shy;ра shy;же shy;ние ис shy;поль shy;зу shy;ет shy;ся нес shy;коль shy;ко раз под shy;ряд.
3. Соз shy;да shy;вать объ shy;ект клас shy;са re shy;gex в ком shy;пи shy;ли shy;ру shy;емом ви shy;де (флаг Com shy;pi shy;led ус shy;та shy;нов shy;лен) и поль shy;зо shy;вать shy;ся его фун shy;к shy;ци shy;ями. Пред shy;поч shy;ти shy;тель shy;но ес shy;ли прог shy;рам shy;ма час shy;то поль shy;зу shy;ет shy;ся вы shy;ра shy;же shy;ни shy;ем.
Ре shy;гу shy;ляр shy;ное вы shy;ра shy;же shy;ние сос shy;то shy;ит из шаб shy;ло shy;на и оп shy;ций. С оп shy;ци shy;ями ра shy;зоб shy;рать shy;ся до shy;воль shy;но прос shy;то, а вот шаб shy;ло shy;ны - это от shy;дель shy;ный язык. По по shy;во shy;ду за shy;да shy;ния шаб shy;ло shy;нов мо shy;гу толь shy;ко по shy;со shy;ве shy;то shy;вать поль shy;зо shy;вать shy;ся раз shy;ны shy;ми вспо shy;мо shy;га shy;тель shy;ны shy;ми прог shy;рам shy;ма shy;ми ти shy;па Ex shy;p shy;res shy;so и пр.
Возь shy;мем для при shy;ме shy;ра прос shy;той шаб shy;лон:
Этот шаб shy;лон вы shy;дер shy;ги shy;ва shy;ет из пред shy;ло shy;жен shy;но shy;го тек shy;с shy;та все URL, и сох shy;ра shy;ня shy;ет их с вы shy;де shy;ле shy;ни shy;ем про shy;то shy;ко shy;ла и до shy;ме shy;на.
Код для ис shy;поль shy;зо shy;ва shy;ния:
Ре shy;зуль shy;тат бу shy;дет:
При shy;ме shy;ров мо shy;жет быть мно shy;жес shy;т shy;во, луч shy;ше пос shy;мот shy;ри shy;те шаб shy;ло shy;ны в дей shy;ст shy;вии... а в Ex shy;p shy;res shy;so есть сис shy;те shy;ма ин shy;те shy;рак shy;тив shy;но shy;го сос shy;тав shy;ле shy;ния шаб shy;ло shy;на... очень по shy;лез shy;но для обу shy;че shy;ния, да и при shy;ме shy;ров у них мно shy;го.
Гла shy;ва 2. Генеалогия классов.
Итак, по shy;го shy;во shy;рим ког shy;да ко shy;го и как нуж shy;но по shy;рож shy;дать.
Один из пос shy;ту shy;ла shy;тов сов shy;ре shy;мен shy;но shy;го вы shy;со shy;ко shy;уров shy;не shy;во shy;го прог shy;рам shy;ми shy;ро shy;ва shy;ния, не всег shy;да вер shy;ных, впро shy;чем, гла shy;сит, что "Чем мень shy;ше оди shy;на shy;ко shy;вых бло shy;ков ко shy;да в прог shy;рам shy;ме - тем луч shy;ше". Пер shy;вое след shy;с shy;т shy;вие из это shy;го пос shy;ту shy;ла shy;та - блок ко shy;да, ко shy;то shy;рый ис shy;поль shy;зу shy;ет shy;ся боль shy;ше, чем в од shy;ном мес shy;те прог shy;рам shy;мы дол shy;жен быть вы shy;не shy;сен в от shy;дель shy;ную фун shy;к shy;цию. Впро shy;чем, это к те shy;ме не от shy;но shy;сит shy;ся. Вто shy;рое след shy;с shy;т shy;вие - на shy;бор пе shy;ре shy;мен shy;ных/фун shy;к shy;ций shy;, ко shy;то shy;рые ис shy;поль shy;зу shy;ют shy;ся боль shy;ше чем в од shy;ном клас shy;се дол shy;ж shy;ны быть вы shy;де shy;ле shy;ны в от shy;дель shy;ный ро shy;ди shy;тель shy;с shy;кий класс. В об shy;щем-то, этим пра shy;ви shy;лом мож shy;но ру shy;ко shy;вод shy;с shy;т shy;во shy;вать shy;ся при оп shy;ре shy;де shy;ле shy;нии "ну shy;жен ли вам не shy;кий ро shy;ди shy;тель для ва shy;ших клас shy;сов?", ес shy;ли у вас их мно shy;го.
Рас shy;смот shy;рим мо shy;дель shy;ную си shy;ту shy;ацию с мно shy;жес shy;т shy;вом клас shy;сов, и оп shy;ре shy;де shy;лим ка shy;кие им нуж shy;ны род shy;с shy;т shy;вен shy;ные свя shy;зи.
До shy;воль shy;но клас shy;си shy;чес shy;кий при shy;мер - эле shy;мен shy;ты уп shy;рав shy;ле shy;ния. Рас shy;смот shy;рим 4 эле shy;мен shy;та уп shy;рав shy;ле shy;ния: кноп shy;ка, тек shy;с shy;то shy;вое по shy;ле, па shy;нель и груп shy;па. У всех этих эле shy;мен shy;тов дол shy;ж shy;ны быть свой shy;ст shy;ва: по shy;ло shy;же shy;ние, раз shy;мер, со shy;бы shy;тия на shy;жа shy;тия, фо shy;ку shy;са и еще мож shy;но мно shy;го вся shy;ких на shy;пи shy;сать для удоб shy;с shy;т shy;ва прог shy;рам shy;мис shy;тов. Ста shy;ло быть один пре shy;док, об shy;щий для всех эле shy;мен shy;тов уп shy;рав shy;ле shy;ния на shy;шел shy;ся. Ду shy;ма shy;ем даль shy;ше - па shy;нель и груп shy;па дол shy;ж shy;ны иметь под shy;чи shy;нен shy;ные эле shy;мен shy;ты уп shy;рав shy;ле shy;ния, а так shy;же уметь прок shy;ру shy;чи shy;вать соб shy;с shy;т shy;вен shy;ную внут shy;рен shy;нюю об shy;ласть. Ста shy;ло быть у этих дво shy;их дол shy;жен быть еще об shy;щий пре shy;док. Итак струк shy;ту shy;ра по shy;лу shy;чить shy;ся при shy;мер shy;но та shy;кой shy;:
Ну вот вам об shy;щий прин shy;цип вы shy;де shy;ле shy;ния об shy;щих пред shy;ков.
Рас shy;смот shy;рим воп shy;ро shy;сы нас shy;лед shy;с shy;т shy;ва, ог shy;ра shy;ни shy;че shy;ния на нас shy;лед shy;с shy;т shy;во, рас shy;т shy;ран shy;жи shy;ри shy;ва shy;ния нас shy;лед shy;с shy;т shy;ва и сте shy;ри shy;ли shy;за shy;ции.
Мно shy;гое из то shy;го, о чем сей shy;час пой shy;дет речь уже рас shy;ска shy;зы shy;ва shy;лось в час shy;ти 1 гла shy;ве 1 в раз shy;де shy;ле о дек shy;ла shy;ра shy;ци shy;ях.
Глав shy;ное пра shy;ви shy;ло нас shy;ле shy;до shy;ва shy;ния - каж shy;дый по shy;то shy;мок нас shy;ле shy;ду shy;ет все. Т.е. все чле shy;ны клас shy;са, от shy;к shy;ры shy;тые для нас shy;ле shy;до shy;ва shy;ния, пе shy;ре shy;да shy;ют shy;ся каж shy;до shy;му по shy;том shy;ку в лю shy;бом ко shy;ле shy;не. Един shy;с shy;т shy;вен shy;ное, что мо shy;жет по shy;ме shy;шать - пе shy;ре shy;оп shy;ре shy;де shy;ле shy;ние чле shy;на клас shy;са.
По по shy;во shy;ду "как жить по shy;том shy;кам":
Итак, мо shy;ди shy;фи shy;ка shy;тор ab shy;s shy;t shy;ract у клас shy;са го shy;во shy;рит о том, что сам класс ни shy;че shy;го сде shy;лать не мо shy;жет, толь shy;ко нас shy;лед shy;с shy;т shy;во ос shy;та shy;лось. Бу shy;дем счи shy;тать его без shy;в shy;ре shy;мен shy;но по shy;чив shy;шим род shy;с shy;т shy;вен shy;ни shy;ком... тем са shy;мым дя shy;дей "са shy;мых чес shy;т shy;ных пра shy;вил", ко shy;то shy;рый од shy;на shy;ко весь shy;ма чет shy;ко опи shy;сал как имен shy;но дол shy;ж shy;ны жить его по shy;том shy;ки. Тот же мо shy;ди shy;фи shy;ка shy;тор у чле shy;на клас shy;са го shy;во shy;рит о том, что класс счи shy;та shy;ет этот член обя shy;за shy;тель shy;ным у сво shy;их по shy;том shy;ков, но сам тол shy;ком не зна shy;ет что это та shy;кое. Эда shy;кий стар shy;ший род shy;с shy;т shy;вен shy;ник, зна shy;ющий как дол shy;ж shy;ны жить его по shy;том shy;ки, но сам жи shy;ву shy;щий по-дру shy;го shy;му.
Мо shy;ди shy;фи shy;ка shy;тор vir shy;tu shy;al у чле shy;на клас shy;са го shy;во shy;рит о том, что класс зна shy;ет что де shy;лать, од shy;на shy;ко до shy;пус shy;ка shy;ет иное тол shy;ко shy;ва shy;ние для по shy;том shy;ков. Хо shy;ро shy;ший род shy;с shy;т shy;вен shy;ник с ши shy;ро shy;ки shy;ми взгля shy;да shy;ми :).
Те shy;перь ка shy;са shy;тель shy;но дос shy;ту shy;па к нас shy;лед shy;с shy;т shy;ву:
мо shy;ди shy;фи shy;ка shy;тор pri shy;va shy;te обес shy;пе shy;чи shy;ва shy;ет неп shy;ри shy;кос shy;но shy;вен shy;ность нас shy;лед shy;с shy;т shy;ва. Дос shy;туп есть толь shy;ко из дру shy;гих унас shy;ле shy;до shy;ван shy;ных фун shy;к shy;ций. Нап shy;ри shy;мер, у ро shy;ди shy;те shy;ля есть от shy;к shy;ры shy;тая фун shy;к shy;ция
мо shy;ди shy;фи shy;ка shy;тор pro shy;tec shy;ted, в воп shy;ро shy;сах нас shy;лед shy;с shy;т shy;ва, эк shy;ви shy;ва shy;лен shy;тен pub shy;lic - нас shy;лед shy;с shy;т shy;во от shy;к shy;ры shy;то для дос shy;ту shy;па. "Поль shy;зуй shy;тесь, род shy;с shy;т shy;вен shy;нич shy;ки до shy;ро shy;гие!"
Те shy;перь о соб shy;с shy;т shy;вен shy;ном мне shy;нии по shy;том shy;ков по по shy;во shy;ду нас shy;лед shy;с shy;т shy;ва.
Воб shy;щем-то, ник shy;то не ме shy;ша shy;ет по shy;том shy;кам вы shy;би shy;рать из нас shy;лед shy;с shy;т shy;ва толь shy;ко пон shy;ра shy;вив shy;ши shy;еся час shy;ти. Да и по shy;сы shy;лать стар shy;ших с их со shy;ве shy;та shy;ми "как на shy;до жить" то shy;же. Лю shy;бая фун shy;к shy;ция, объ shy;яв shy;лен shy;ная vir shy;tu shy;al мо shy;жет быть пе shy;ре shy;оп shy;ре shy;де shy;ле shy;на мо shy;ди shy;фи shy;ка shy;то shy;ром over shy;ri shy;de. Ес shy;ли очень на shy;до пе shy;ре shy;оп shy;ре shy;де shy;лить фун shy;к shy;цию не от shy;ме shy;чен shy;ную vir shy;tu shy;al - мож shy;но ис shy;поль shy;зо shy;вать мо shy;ди shy;фи shy;ка shy;тор new. Прав shy;да с этим на shy;до быть ос shy;то shy;рож shy;ным - ес shy;ли уж вы нас shy;ле shy;ду shy;ете от ко shy;го-то, к вам бу shy;дут со shy;от shy;вет shy;с shy;т shy;вен shy;но от shy;но shy;сит shy;ся и мо shy;жет быть кон shy;ф shy;ликт с дру shy;ги shy;ми клас shy;са shy;ми, жду shy;щи shy;ми од shy;ной под shy;пи shy;си фун shy;к shy;ции, а на shy;па shy;ры shy;ва shy;ющи shy;ми shy;ся на дру shy;гую. Да и от род shy;ни не уй shy;дешь - до ори shy;ги shy;наль shy;но shy;го ва shy;ри shy;ан shy;та фун shy;к shy;ции все рав shy;но всег shy;да мож shy;но дос shy;ту shy;чать shy;ся, ес shy;ли знать что он есть. Из shy;нут shy;ри по shy;том shy;ка дос shy;та shy;точ shy;но ис shy;поль shy;зо shy;вать клю shy;че shy;вое сло shy;во ba shy;se, а сна shy;ру shy;жи - пре shy;об shy;ра shy;зо shy;вать тип объ shy;ек shy;та в тип пред shy;ка. Пред shy;по shy;ло shy;жим, фун shy;к shy;ция
И са shy;мое страш shy;ное - сте shy;ри shy;ли shy;за shy;ция.
Очень прос shy;то де shy;ла shy;ет shy;ся, как и все ужа shy;сы в на shy;шем ми shy;ре. Мо shy;ди shy;фи shy;ка shy;тор клас shy;са se shy;aled - сте shy;ри shy;ли shy;зу shy;ет его, и у не shy;го уже ни shy;ког shy;да не бу shy;дет де shy;тей :(. Тот же мо shy;ди shy;фи shy;ка shy;тор, при shy;ме shy;нен shy;ный к vir shy;tu shy;al фун shy;к shy;ции от shy;ме shy;ня shy;ет ее вир shy;ту shy;аль shy;ность.
И на shy;пос shy;ле shy;док - крес shy;т shy;ные (отцы/ма shy;те shy;ри/дя shy;ди/те shy;ти/феи и пр. фоль shy;к shy;лор shy;ные эле shy;мен shy;ты)
В ро shy;ли крес shy;т shy;ных выс shy;ту shy;па shy;ют ин shy;тер shy;фей shy;сы. Их у каж shy;до shy;го клас shy;са мо shy;жет быть сколь shy;ко угод shy;но, и для то shy;го, что shy;бы иметь крес shy;т shy;ных не обя shy;за shy;тель shy;но иметь ро shy;ди shy;те shy;лей. Ин shy;тер shy;фей shy;сы все очень стро shy;гие - они точ shy;но зна shy;ют что дол shy;жен уметь де shy;лать их крес shy;т shy;ник, и не от shy;с shy;та shy;ют, по shy;ка он все shy;му это shy;му не на shy;учить shy;ся. При shy;чем все, че shy;му учит ин shy;тер shy;фей shy;с обя shy;за shy;тель shy;но ос shy;та shy;ет shy;ся в дос shy;туп shy;ном нас shy;лед shy;с shy;т shy;ве (pub shy;lic). Ну а воз shy;мож shy;ность по shy;том shy;ков ре shy;шать са shy;мим за shy;ви shy;сит толь shy;ко от пред shy;ка, но ни shy;как не от крес shy;т shy;но shy;го. Это в клас shy;се-пред shy;ке оп shy;ре shy;де shy;ля shy;ет shy;ся бу shy;дет ли фун shy;к shy;ция с мо shy;ди shy;фи shy;ка shy;то shy;ром vir shy;tu shy;al или нет, да и что имен shy;но бу shy;дет де shy;лать фун shy;к shy;ция то shy;же оп shy;ре shy;де shy;ля shy;ет shy;ся там.
Час shy;то бы shy;ва shy;ет так, что раз shy;ные ин shy;тер shy;фей shy;сы под од shy;ним и тем же име shy;нем ра shy;зу shy;ме shy;ют раз shy;ные ве shy;щи... тог shy;да клас shy;су ни shy;че shy;го не ос shy;та shy;ет shy;ся, как вы shy;учить оба тол shy;ко shy;ва shy;ния, да еще за shy;пом shy;нить от ко shy;го ка shy;кое он по shy;лу shy;чил. Выг shy;ля shy;дит это при shy;мер shy;но так:
каж shy;дое по shy;ле ин shy;тер shy;фей shy;са мо shy;жет быть им shy;п shy;ле shy;мен shy;ти shy;ро shy;ва shy;но в клас shy;се внут shy;рен shy;ним и внеш shy;ним об shy;ра shy;зом
Импле shy;мен shy;ти shy;ро shy;ва shy;ние внеш shy;ним об shy;ра shy;зом яв shy;но ука shy;зы shy;ва shy;ет на ис shy;точ shy;ник тол shy;ко shy;ва shy;ния ка shy;ко shy;го-ли shy;бо по shy;ля. Та shy;кой под shy;ход поз shy;во shy;ля shy;ет из shy;бе shy;жать оши shy;бок при ком shy;пи shy;ля shy;ции и при пос shy;ле shy;ду shy;ющих об shy;ра shy;ще shy;ни shy;ях. Кста shy;ти, за shy;пом shy;ни shy;те, ес shy;ли вам нуж shy;на от объ shy;ек shy;та фун shy;к shy;ция ка shy;ко shy;го-то из его ин shy;тер shy;фей shy;сов - всег shy;да об shy;ра shy;щай shy;тесь к ней пред shy;ва shy;ри shy;тель shy;но пре shy;об shy;ра shy;зо shy;вав тип объ shy;ек shy;та в тип ин shy;тер shy;фей shy;са. Нап shy;ри shy;мер: объ shy;ект ob1 им shy;п shy;ле shy;мен shy;ти shy;ру shy;ет нес shy;коль shy;ко ин shy;тер shy;фей shy;сов, в том чис shy;ле IIn shy;ter shy;fa shy;ce1, с нуж shy;ной нам фун shy;к shy;ци shy;ей in shy;t shy;Func1:
Этим вы да shy;ете по shy;нять, что вам нуж shy;на фун shy;к shy;ция in shy;t shy;Func1 имен shy;но в трак shy;тов shy;ке IIn shy;ter shy;fa shy;ce1, а не в чьей shy;-ни shy;будь дру shy;гой. А то фун shy;к shy;цию On shy;Pa shy;int кто толь shy;ко не им shy;п shy;ле shy;мен shy;ти shy;ру shy;ет...
Глава 3. Исключения.
Исклю shy;че shy;ния (Excep shy;ti shy;ons) - это то, что слу shy;ча shy;ет shy;ся, ког shy;да что-то неп shy;ра shy;виль shy;но. Нап shy;ри shy;мер, вы пы shy;та shy;етесь от shy;к shy;рыть файл, ко shy;то shy;ро shy;го нет - сис shy;тем shy;ная биб shy;ли shy;оте shy;ка ки shy;нет ис shy;к shy;лю shy;че shy;ние "файл не най shy;ден".
Исклю shy;че shy;ния на shy;до уметь ки shy;дать (throw) и ло shy;вить (catch).
Лич shy;но я знаю 3 ме shy;то shy;ди shy;ки ра shy;бо shy;ты с ис shy;к shy;лю shy;че shy;ни shy;ями, каж shy;дая из ко shy;то shy;рых на shy;пи shy;са shy;на прог shy;рам shy;мис shy;том с боль shy;шим опы shy;том и мно shy;го shy;мет shy;ро shy;вым спис shy;ком ре shy;га shy;лий shy;, при shy;чем каж shy;дая из них ссы shy;ла shy;ет shy;ся на ка shy;ко shy;го-ни shy;будь ве shy;ли shy;ко shy;го гу shy;ру (одно shy;го из соз shy;да shy;те shy;лей .net, нап shy;ри shy;мер). На shy;до за shy;ме shy;тить, что эти три ме shy;то shy;ди shy;ки во мно shy;гом про shy;ти shy;во shy;ре shy;чат друг дру shy;гу. Вы shy;вод - ни shy;ка shy;кой "пра shy;виль shy;ной shy;" или "луч shy;шей shy;" ме shy;то shy;ди shy;ки ра shy;бо shy;ты с ис shy;к shy;лю shy;че shy;ни shy;ями нет. Есть толь shy;ко не shy;ко shy;то shy;рые пра shy;ви shy;ла, и чье-то мне shy;ние :).
Рас shy;смот shy;рим ос shy;но shy;вы ра shy;бо shy;ты с ис shy;к shy;лю shy;че shy;ни shy;ями и те пра shy;ви shy;ла, ко shy;то shy;рые оди shy;на shy;ко shy;вы во всех трех ме shy;то shy;ди shy;ках.
Как ки shy;дать ис shy;к shy;лю shy;че shy;ния
Для ки shy;да shy;ния су shy;щес shy;т shy;ву shy;ет клю shy;че shy;вое сло shy;во throw.
Нап shy;ри shy;мер, вы пи shy;ше shy;те фун shy;к shy;цию рас shy;че shy;та че shy;го-ни shy;будь по двум дроб shy;ным вхо shy;дя shy;щим ар shy;гу shy;мен shy;там, но вам нуж shy;но что shy;бы ар shy;гу shy;мен shy;ты бы shy;ли боль shy;ше 1, ина shy;че ни shy;че shy;го не пос shy;чи shy;та shy;ет shy;ся... Вы мо shy;же shy;те про shy;ве shy;рять ар shy;гу shy;мен shy;ты и ес shy;ли они мень shy;ше - воз shy;в shy;ра shy;щать do shy;ub shy;le.NaN. Так ус shy;т shy;ро shy;ены ма shy;те shy;ма shy;ти shy;чес shy;кие фун shy;к shy;ции клас shy;са Math. А мо shy;же shy;те сде shy;лать так:
Еще си shy;ту shy;ация ког shy;да на shy;до ки shy;дать ис shy;к shy;лю shy;че shy;ния - ког shy;да вы пе shy;рех shy;ва shy;ты shy;ва shy;ете ис shy;к shy;лю shy;че shy;ние в сво shy;ей фун shy;к shy;ции, но вам на shy;до до shy;ба shy;вить к не shy;му ка shy;кую-то ин shy;фор shy;ма shy;цию.... нап shy;ри shy;мер, так:
Как ло shy;вить ис shy;к shy;лю shy;че shy;ния
Для от shy;ло shy;ва ис shy;к shy;лю shy;че shy;ний ис shy;поль shy;зу shy;ет shy;ся кон shy;с shy;т shy;рук shy;ция try {} catch {} fi shy;nal shy;ly {}.
Блок try (поп shy;ро shy;бо shy;вать) со shy;дер shy;жит код, ко shy;то shy;рый мо shy;жет выз shy;вать ошиб shy;ку.
Блок catch (пой shy;мать) со shy;дер shy;жит код об shy;ра shy;бот shy;ки ошиб shy;ки. Та shy;ких бло shy;ков мо shy;жет быть нес shy;коль shy;ко - на каж shy;дый тип ошиб shy;ки, ко shy;то shy;рые вы жде shy;те.
Блок fi shy;nal shy;ly (на shy;пос shy;ле shy;док) не shy;обя shy;за shy;те shy;лен, в не shy;го по shy;ме shy;ща shy;ет shy;ся код, ко shy;то shy;рый вы shy;пол shy;ня shy;ет shy;ся в лю shy;бом слу shy;чае - за shy;кон shy;чил shy;ся ли блок try нор shy;маль shy;но, или ки shy;нул ис shy;к shy;лю shy;че shy;ние. Осо shy;бая фи shy;ча бло shy;ка fi shy;nal shy;ly - он вы shy;пол shy;ня shy;ет shy;ся да shy;же ес shy;ли фун shy;к shy;ция уже вер shy;ну shy;ла зна shy;че shy;ние.
При shy;мер:
Вмес shy;то бло shy;ка fi shy;nal shy;ly мож shy;но ис shy;поль shy;зо shy;вать кон shy;с shy;т shy;рук shy;цию using () {}. Эта кон shy;с shy;т shy;рук shy;ция поз shy;во shy;ля shy;ет убе shy;дить shy;ся, что все ре shy;сур shy;сы за shy;ня shy;тые не shy;ким объ shy;ек shy;том бу shy;дут пе shy;ре shy;ки shy;ну shy;ты в му shy;сор или уда shy;ле shy;ны, в за shy;ви shy;си shy;мос shy;ти от ти shy;па, по за shy;вер shy;ше shy;нии кус shy;ка ко shy;да, вне за shy;ви shy;си shy;мос shy;ти от ре shy;зуль shy;та shy;тов это shy;го са shy;мо shy;го ко shy;да.
при shy;мер:
Да shy;же ес shy;ли код ки shy;нет ис shy;к shy;лю shy;че shy;ние - obj shy;ect1 бу shy;дет уда shy;лен. Для бло shy;ка using не обя shy;за shy;тель shy;на ини shy;ци shy;али shy;за shy;ция а бло shy;ке, мож shy;но и так:
Кон shy;с shy;т shy;рук shy;ция using мо shy;жет выс shy;ту shy;пать за shy;ме shy;ни shy;те shy;лем бло shy;ка fi shy;nal shy;ly толь shy;ко ес shy;ли вам в этом бло shy;ке на shy;до бы shy;ло уда shy;лить один объ shy;ект. Впро shy;чем, это очень час shy;то слу shy;ча shy;ет shy;ся. С дру shy;гой сто shy;ро shy;ны, она весь shy;ма по shy;лез shy;на, ког shy;да код, ис shy;поль shy;зу shy;ющий объ shy;ект име shy;ет нес shy;коль shy;ко то shy;чек воз shy;в shy;ра shy;ще shy;ния. Что shy;бы точ shy;но не за shy;быть снес shy;ти объ shy;ект - про shy;ще зак shy;лю shy;чить код в блок using. При shy;мер:
Что shy;бы не пи shy;сать каж shy;дый раз Dis shy;po shy;se, мож shy;но сде shy;лать так:
Си shy;ту shy;ации в ко shy;то shy;рых на shy;до ло shy;вить ис shy;к shy;лю shy;че shy;ния
В об shy;щем ви shy;де это зву shy;чит как "Ло shy;вить ис shy;к shy;лю shy;че shy;ния на shy;до ког shy;да что-то мо shy;жет пой shy;ти не так". Ни о чем не го shy;во shy;ря shy;щая фра shy;за. Ес shy;ли быть бли shy;же к ре shy;аль shy;нос shy;ти - ло shy;вить ис shy;к shy;лю shy;че shy;ния на shy;до тог shy;да, ког shy;да вы не уве shy;ре shy;ны в об shy;ра shy;ба shy;ты shy;ва shy;емых дан shy;ных. Эта не shy;уве shy;рен shy;ность мо shy;жет быть по по shy;во shy;ду ти shy;па дан shy;ных, зна shy;че shy;ния дан shy;ных и т. д. Стан shy;дар shy;т shy;ные си shy;ту shy;ации, ког shy;да вы не мо shy;же shy;те быть уве shy;ре shy;ны:
Все что ка shy;са shy;ет shy;ся вво shy;да дан shy;ных от поль shy;зо shy;ва shy;те shy;ля - ник shy;то не зна shy;ет что вве shy;дет поль shy;зо shy;ва shy;тель.
Лю shy;бое чте shy;ние из по shy;то shy;ка, ес shy;ли толь shy;ко это не по shy;ток в па shy;мя shy;ти - кто зна shy;ет что там в фай shy;ле на са shy;мом де shy;ле.
Лю shy;бая се shy;те shy;вая опе shy;ра shy;ция - вы не мо shy;же shy;те быть уве shy;ре shy;ны, что в нуж shy;ный мо shy;мент не обор shy;вет shy;ся ка shy;бель или си shy;сад shy;мин не ре shy;шит по shy;шу shy;тить.
Лю shy;бое об shy;ра shy;ще shy;ние к внеш shy;ним ба shy;зам дан shy;ных на shy;до рас shy;смат shy;ри shy;вать как се shy;те shy;вую опе shy;ра shy;цию.
Лю shy;бой вы shy;вод в по shy;ток - мес shy;то на дис shy;ке за shy;кан shy;чи shy;ва shy;ет shy;ся в са shy;мый не shy;под shy;хо shy;дя shy;щий мо shy;мент.
Общие ме shy;то shy;ди shy;ки
Исклю shy;че shy;ния - не па shy;на shy;цея и не что-то очень хо shy;ро shy;шее, чем на shy;до час shy;то поль shy;зо shy;вать shy;ся. Они жрут по shy;ряд shy;ком ре shy;сур shy;сов, так что ре shy;ко shy;мен shy;ду shy;ет shy;ся про shy;ве shy;рять зна shy;че shy;ния ар shy;гу shy;мен shy;тов са shy;мим, а не по shy;ла shy;гать shy;ся на выб shy;рос ис shy;к shy;лю shy;че shy;ния.
При shy;мер:
та shy;кой код быс shy;т shy;рее, чем:
и уж, тем бо shy;лее, чем:
Те shy;перь рас shy;ска shy;жу о раз shy;ных взгля shy;дах на об shy;щую тех shy;ни shy;ку. Лич shy;но я не счи shy;таю хоть один из этих ме shy;то shy;дов пра shy;виль shy;ным всег shy;да, им shy;хо - дей shy;ст shy;во shy;вать на shy;до по си shy;ту shy;ации. А ос shy;нов shy;ны shy;ми па shy;ра shy;мет shy;ра shy;ми, вли shy;я shy;ющи shy;ми на мой ме shy;тод от shy;ло shy;ва ис shy;к shy;лю shy;че shy;ний яв shy;ля shy;ют shy;ся раз shy;мер прог shy;рам shy;мы, сто shy;имость за shy;ка shy;за и вре shy;мя на соз shy;да shy;ние. Для пок shy;лон shy;ни shy;ков кор shy;по shy;ра shy;тив shy;но shy;го прог shy;рам shy;ми shy;ро shy;ва shy;ния хо shy;чу на shy;пом shy;нить - на shy;пи shy;са shy;ние всех воз shy;мож shy;ных оши shy;бок в прог shy;рам shy;ме вмес shy;те с ком shy;мен shy;та shy;ри shy;ями зай shy;мет вре shy;ме shy;ни боль shy;ше, чем соз shy;да shy;ние все shy;го ос shy;таль shy;но shy;го ко shy;да, без ин shy;тер shy;фей shy;са. И боль shy;шин shy;с shy;т shy;во кли shy;ен shy;тов хо shy;тят прог shy;рам shy;му быс shy;т shy;ро и де shy;ше shy;во, а не дол shy;го и до shy;ро shy;го, но с под shy;роб shy;ны shy;ми ошиб shy;ка shy;ми :). В от shy;ло shy;ве оши shy;бок глав shy;ное, им shy;хо, чтоб ин shy;фор shy;ма shy;ция об от shy;лов shy;лен shy;ной ошиб shy;ке бы shy;ла дос shy;та shy;точ shy;ной для вас, что shy;бы эту ошиб shy;ку най shy;ти и ис shy;п shy;ра shy;вить. А на поль shy;зо shy;ва shy;те shy;ля на shy;до вы shy;во shy;дить толь shy;ко! то, с чем он мо shy;жет спра shy;вить shy;ся сам - а это очень нем shy;но shy;го.
1.
2.
3.
И на shy;пос shy;ле shy;док - пом shy;ни shy;те, что пос shy;ле от shy;ло shy;ва ис shy;к shy;лю shy;че shy;ния прог shy;рам shy;ма час shy;то ос shy;та shy;ет shy;ся в не shy;ком про shy;ме shy;жу shy;точ shy;ном сос shy;то shy;янии - по shy;ло shy;ви shy;на зап shy;ро shy;шен shy;ных поль shy;зо shy;ва shy;те shy;лем дей shy;ст shy;вий вы shy;пол shy;не shy;на, вто shy;рая нет. Так что ра shy;бо shy;тать на shy;до ос shy;то shy;рож shy;но, что shy;бы не вой shy;ти в бес shy;ко shy;неч shy;ный цикл оши shy;бок. Осо shy;бен shy;но это ка shy;са shy;ет shy;ся еди shy;но shy;го пе shy;рех shy;ват shy;чи shy;ка. Ес shy;ли прог shy;рам shy;ма прос shy;тая, то в ко shy;де пе shy;рех shy;ват shy;чи shy;ка дол shy;ж shy;но быть при shy;ве shy;де shy;ние прог shy;рам shy;мы к ра shy;бо shy;че shy;му сос shy;то shy;янию. Ес shy;ли прог shy;рам shy;ма боль shy;шая и слож shy;ная - то вез shy;де, где по shy;яв shy;ле shy;ние ис shy;к shy;лю shy;че shy;ния гро shy;зит на shy;ру shy;ше shy;ни shy;ем хо shy;да прог shy;рам shy;мы дол shy;жен сто shy;ять свой ло shy;вец.
Гла shy;ва 4. Мультипоточность.
Муль shy;ти-по shy;точ shy;ность (mul shy;ti-thre shy;ading) - свой shy;ст shy;во прог shy;рамм вы shy;пол shy;нять нес shy;коль shy;ко за shy;дач од shy;нов shy;ре shy;мен shy;но. Ус shy;лов shy;но од shy;нов shy;ре shy;мен shy;но, ко shy;неч shy;но. В за shy;ви shy;си shy;мос shy;ти от ти shy;па про shy;цес shy;со shy;ра, од shy;нов shy;ре shy;мен shy;ность мо shy;жет быть ис shy;тин shy;ной и ими shy;ти shy;ру shy;емой. Впро shy;чем, для боль shy;шин shy;с shy;т shy;ва прог shy;рам shy;мис shy;тов эта раз shy;ни shy;ца не shy;су shy;щес shy;т shy;вен shy;на.
Основ shy;ны shy;ми мо shy;мен shy;та shy;ми, зат shy;руд shy;ня shy;ющи shy;ми раз shy;ра shy;бот shy;ку муль shy;ти shy;по shy;точ shy;ных при shy;ло shy;же shy;ний яв shy;ля shy;ет shy;ся не shy;воз shy;мож shy;ность пред shy;с shy;ка shy;зать пос shy;ле shy;до shy;ва shy;тель shy;ность за shy;вер shy;ше shy;ния от shy;дель shy;ных по shy;то shy;ков на раз shy;ных ма shy;ши shy;нах. Да и от shy;лад shy;ка муль shy;ти shy;по shy;точ shy;ных при shy;ло shy;же shy;ний всег shy;да бы shy;ла го shy;лов shy;ной болью. Впро shy;чем, на VS 2005 вро shy;де бы с этим поп shy;ро shy;ще... по shy;ка у ме shy;ня все вро shy;де ра shy;бо shy;та shy;ло нор shy;маль shy;но. А вот 2003 VS глю shy;чил страш shy;но ес shy;ли раз shy;ные по shy;то shy;ки за shy;пус shy;ка shy;лись из раз shy;ных биб shy;ли shy;отек.
При муль shy;ти shy;по shy;точ shy;ном вы shy;пол shy;не shy;нии ко shy;да ос shy;нов shy;ной проб shy;ле shy;мой яв shy;ля shy;ет shy;ся от shy;с shy;ле shy;жи shy;ва shy;ние дос shy;ту shy;пов из раз shy;ных по shy;то shy;ков к од shy;ной стра shy;ни shy;це па shy;мя shy;ти. Ни в ко shy;ем слу shy;чае не дол shy;ж shy;но по shy;лу shy;чить shy;ся так, что shy;бы один по shy;ток за shy;пи shy;сы shy;вал в пе shy;ре shy;мен shy;ную, ког shy;да дру shy;гой счи shy;ты shy;ва shy;ет из нее. След shy;с shy;т shy;вие из вы shy;шес shy;ка shy;зан shy;но shy;го - ес shy;ли у вас все ра shy;бо shy;та shy;ет нор shy;маль shy;но, т.е. по shy;то shy;ки не пе shy;ре shy;се shy;ка shy;ют shy;ся в од shy;ной пе shy;ре shy;мен shy;ной shy;, это не зна shy;чит, что они не пе shy;ре shy;се shy;кут shy;ся на дру shy;гой ма shy;ши shy;не. От shy;сю shy;да дру shy;гая проб shy;ле shy;ма - син shy;х shy;ро shy;ни shy;за shy;ц