comp_programming Catone. Catone. Азы C#.

По прось­бам чи­та­те­лей­, по­пы­тал­ся на­пи­сать об ос­но­вах язы­ка. Впро­чем, толь­ко прис­ту­пив по­нял, что де­ло гиб­лое - что­бы пи­сать об ос­но­вах на­до быть или МУД­рым АКа­де­ми­кОМ, или дей­ст­ви­тель­но иметь та­лант пре­по­да­ва­те­ля. Я та­ко­во­го та­лан­та не имею. По­это­му смо­гу толь­ко крат­ко рас­ска­зать о не­ко­то­рых осо­бен­нос­тях.

csharp, c-sharp, c#, программирование ru
Book Designer 4.0 30.09.2006 BD-E2PASSNH-MAGG-BRAC-PJMU-8RJITQDLHTD6 1.0
<p>Catone.</p> <empty-line/> <p>Азы C#.</p>
СОДЕРЖАНИЕ Часть 1. Гла shy;ва 2. Синтаксис деклараций. Гла shy;ва 3. Синтаксис деклараций массивов, свойств, делегатов. Assembly. Глава 4. Основные операторы и конструкты. Гла shy;ва 5. Инициализация переменных. Коллекции. Типы данных. Гла shy;ва 6. Пример кода. Часть 2. Гла shy;ва 2. Генеалогия классов. Глава 3. Исключения. Гла shy;ва 4. Мультипоточность. Глава 5. Вызов функций библиотек Win32 (P/Invoke) Часть 3. Глава 2. Сериализация. Глава 3. Reflection. Глава 4. Самодельные элементы управления 1. Глава 5. Самодельные элементы управления 2. Часть 4. Глава 2. Объект Graphics. Глава 3. Цвета. Гла shy;ва 4. Карандаши. Гла shy;ва 5. Кисти. Гла shy;ва 6. Геометрические элементы. Гла shy;ва 7. Матричные трансформации. Гла shy;ва 8. Графические файлы. Глава 9. Примеры. Приложения. 2. Самодельная головоломка. 3. Самодельный изменятель размера картинок. 4. Системный индикатор в заголовке окна. 5. "Ошкуривание" программы. 6. Перехватчик всех ошибок. 7. Самодельный бекапер. Часть 1.
<p><cite id="BdToc_1"> </cite> Часть 1.</p>

Самые основные вещи в языке C# и платформе .NET вцелом.

<p>Глава 1. Как читать чужой код.</p>

По прось shy;бам чи shy;та shy;те shy;лей shy;, по shy;пы shy;тал shy;ся на shy;пи shy;сать об ос shy;но shy;вах язы shy;ка. Впро shy;чем, толь shy;ко прис shy;ту shy;пив по shy;нял, что де shy;ло гиб shy;лое - что shy;бы пи shy;сать об ос shy;но shy;вах на shy;до быть или МУД shy;рым АКа shy;де shy;ми shy;кОМ, или дей shy;ст shy;ви shy;тель shy;но иметь та shy;лант пре shy;по shy;да shy;ва shy;те shy;ля. Я та shy;ко shy;во shy;го та shy;лан shy;та не имею. По shy;это shy;му смо shy;гу толь shy;ко крат shy;ко рас shy;ска shy;зать о не shy;ко shy;то shy;рых осо shy;бен shy;нос shy;тях. По shy;няв, что от та shy;ко shy;го тол shy;ку ма shy;ло, я ре shy;шил на shy;пи shy;сать для на shy;ча shy;ла как чи shy;тать чу shy;жой код. Ибо, нас shy;коль shy;ко я по shy;ни shy;маю, ос shy;нов shy;ные проб shy;ле shy;мы с по shy;ни shy;ма shy;ни shy;ем ко shy;да кро shy;ют shy;ся не в нез shy;на shy;нии, а в не shy;уме shy;нии эти са shy;мые зна shy;ния до shy;быть. В этой об shy;лас 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;ка1.Click += new 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;тии "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;нять как. Боль shy;шин shy;с shy;т shy;во, т.е. поч shy;ти все, фун shy;к shy;ции и свой shy;ст shy;ва стан shy;дар shy;т shy;ных клас shy;сов об shy;ла shy;да shy;ют наз shy;ва shy;ни shy;ями точ shy;но опи shy;сы shy;ва shy;ющи shy;ми их дей shy;ст 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;C shy;hil shy;d shy;F shy;rom shy;Po shy;int = Get Child From Po shy;int = По shy;лу shy;чить Ре shy;бен 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.ToS shy;t shy;ring = Con shy;vert To 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;ке:

lar shy;ge shy;rI shy;ma shy;ges shy;Com shy;bo shy;Box.Da shy;ta shy;So shy;ur shy;ce = Enum.Get shy;Na shy;mes(type shy;of(Des shy;k shy;top shy;Bac shy;k shy;g shy;ro shy;un shy;d shy;S shy;t shy;y shy;le));

да 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'ом.

<p><cite id="BdToc_2"> </cite> Гла shy;ва 2. Синтаксис деклараций.</p>

Вто shy;рая по shy;пыт shy;ка на shy;пи 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;ных:

int i; pub shy;lic do shy;ub shy;le myDo shy;ub shy;le1, myDo shy;ub shy;le2; inter shy;nal sta shy;tic System.String con shy;st_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;жет быть 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;:

pri shy;va shy;te vo shy;id MyFunc1(int i1, do shy;ub shy;le d1) {} inter shy;nal ab shy;s shy;t shy;ract string Ge shy;tAs shy;S shy;t shy;ring(); inter shy;nal over shy;ri shy;de string Ge shy;tAs shy;S shy;t shy;ring() {} pub shy;lic sta shy;tic do shy;ub shy;le Get shy;Sum(do shy;ub shy;le d1, do shy;ub shy;le d2) { re shy;turn d1+d2; }

Дек shy;ла shy;ра shy;ция клас shy;са мо shy;жет вклю shy;чать ука shy;за shy;ние клас shy;са ро shy;ди shy;те shy;ля, че shy;рез дво shy;ето shy;чие, да shy;лее че shy;рез за shy;пя shy;тую - под shy;к shy;лю shy;чен shy;ные ин shy;тер shy;фей shy;сы. Ин shy;тер shy;фей shy;с - спи shy;сок фун shy;к shy;ций. В ка shy;ком-то кри shy;вом смыс shy;ле - ро shy;ди shy;тель shy;с shy;кий класс, ко shy;то shy;рый мож shy;но про shy;из shy;воль shy;но при shy;ле shy;пить ку shy;да угод shy;но. Та shy;ким об shy;ра shy;зом по shy;лу shy;ча shy;ют shy;ся клас shy;сы, от раз shy;ных ро shy;ди shy;те shy;лей shy;, но под shy;дер shy;жи shy;ва shy;ющие од shy;ни и те же опе shy;ра shy;ции. До shy;воль shy;но удоб shy;ная вещь.

При shy;мер дек shy;ла shy;ра shy;ции клас shy;са:

inter shy;nal class MyClass1 : MyPa shy;ren shy;t shy;C shy;lass1, IIn shy;ter shy;fa shy;ce1, IIn shy;ter shy;fa shy;ce2 { }

Дек shy;ла shy;ра shy;ция кон shy;с shy;т shy;рук shy;то shy;ра клас shy;са мо shy;жет вклю shy;чать ука shy;за shy;ние на дру shy;гой кон shy;с shy;т 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 class MyClass : Pa shy;ren shy;t shy;C shy;lass { pub shy;lic MyClass(int i1) : ba shy;se() { } pub shy;lic MyClass() : this(0) { } }

И пос 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:

pub shy;lic enum Ima shy;ge shy;Fi shy;le shy;For shy;mat { JPEG, PNG, TIFF, Bit shy;map} pub shy;lic enum Sup shy;por shy;ted shy;Lan shy;gu shy;ages { Рус shy;ский shy;=1, English=10, Ger shy;man=11}
<p><cite id="BdToc_3"> </cite> Гла shy;ва 3. Синтаксис деклараций массивов, свойств, делегатов. Assembly.</p>

Мас shy;си shy;вы

Итак, мас shy;сив - на shy;бор объ shy;ек shy;тов од shy;но shy;го ти shy;па, име shy;ющий чет shy;кую пос shy;ле shy;до shy;ва shy;тель shy;ность этих объ 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;мер:

int[] in shy;tAr shy;ray;

В строч 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;вов:

int[][] int2dAr shy;ray;

Сис 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:

int[,] int2dAr shy;ray;

Внут shy;ри скоб shy;ки ста shy;вит shy;ся нуж shy;ное ко shy;ли shy;чес shy;т shy;во за shy;пя shy;тых, каж shy;дая за shy;пя shy;тая соз shy;да shy;ет плюс од shy;но из shy;ме shy;ре shy;ние мас shy;си shy;ва. Т.е. в при shy;ве shy;ден shy;ной вы shy;ше строч shy;ке дек shy;ла shy;ри shy;ру shy;ет shy;ся таб shy;ли shy;ца (дву shy;мер shy;ный мас shy;сив) для це shy;ло shy;чис shy;лен shy;ных дан shy;ных.

У каж shy;до shy;го ва shy;ри shy;ан shy;та есть свои плю shy;сы и свои ми shy;ну shy;сы. Ес shy;ли ко shy;рот shy;ко - вто shy;рой ва shy;ри shy;ант удоб shy;нее и чуть быс shy;т shy;рее ра shy;бо shy;та shy;ет, за shy;то пер shy;вый ва shy;ри shy;ант поз shy;во shy;ля shy;ет раз shy;де shy;лять мас shy;сив на сос shy;тав shy;ля shy;ющие при не shy;об shy;хо shy;ди shy;мос shy;ти. При shy;ме shy;ры ис shy;поль shy;зо shy;ва shy;ния мас shy;си shy;вов бу shy;дут по shy;том.

Свой shy;ст shy;ва

Свой shy;ст shy;ва - спе shy;ци shy;аль shy;ная фи shy;ча для воз shy;мож shy;нос shy;ти про shy;вер shy;ки дан shy;ных, вво shy;ди shy;мых в пе shy;ре shy;мен shy;ную и за shy;да shy;ния ка shy;ких-ли shy;бо дей shy;ст shy;вий при из shy;ме shy;не shy;нии зна shy;че shy;ния. Сво shy;его ро shy;да пос shy;ред shy;ник меж shy;ду пе shy;ре shy;мен shy;ной и про shy;чим ко shy;дом, а по сов shy;мес shy;ти shy;тель shy;с shy;т shy;ву - ох shy;ран shy;ник и сек shy;ре 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 flo shy;at _si shy;ze; //пе shy;ре shy;мен shy;ная pub shy;lic pro shy;perty flo shy;at Si shy;ze { //свой shy;ст shy;во - пос shy;ред shy;ник пе shy;ре shy;мен shy;ной _si shy;ze get { re shy;turn _si shy;ze; } set { //про shy;ве shy;рить на пра shy;виль shy;ность _si shy;ze = va shy;lue; OnSi shy;zeC shy;han shy;ged(); } }

Сна 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;ции:

pub shy;lic de shy;le shy;ga shy;te do shy;ub shy;le MyDe shy;le shy;ga shy;te(do shy;ub shy;le d1, do shy;ub shy;le d2);

Не за shy;бы shy;вай shy;те, что де shy;ле shy;гат - это класс, и для то shy;го, что shy;бы его мож shy;но бы shy;ло ис shy;поль shy;зо shy;вать, не shy;об shy;хо shy;ди shy;мо соз shy;дать объ shy;ект де shy;ле shy;га 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;ции:

MyDe shy;le shy;ga shy;te md = new MyDe shy;le shy;ga shy;te(MyFun shy;c shy;ti shy;on); md.Invo shy;ke(d1, d2);

В при 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.

<p><cite id="BdToc_4"> </cite> Глава 4. Основные операторы и конструкты.</p>

Рас shy;смот shy;рев син shy;так shy;сис дек shy;ла shy;ра shy;ций shy;, пе shy;ре shy;хо shy;дим к ос shy;нов shy;ным кон shy;с shy;т shy;рук shy;там или ко shy;ман shy;дам язы shy;ка. Как из shy;вес shy;т shy;но, код внут shy;ри фун shy;к shy;ции вы shy;пол shy;ня shy;ет shy;ся пос shy;т shy;роч shy;но, ес shy;ли не ис shy;поль shy;зу shy;ют shy;ся ка shy;кие-ли shy;бо ко shy;ман shy;ды. Дру shy;ги 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;нять", т.е.

i += 10;

озна shy;ча shy;ет при shy;ба shy;вить 10 к зна shy;че shy;нию пе shy;ре shy;мен shy;ной i, и за shy;пи shy;сать ре shy;зуль shy;тат в нее же. Это ана shy;ло shy;гич shy;но за shy;пи shy;си:

i = i + 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;ной и за shy;пи shy;сать ре shy;зуль shy;тат в нее. Дек shy;ре shy;мен shy;т shy;ный опе shy;ра shy;тор.

Основ shy;ные кон shy;с shy;т shy;рук shy;ты мож shy;но раз shy;де shy;лить на цик shy;ло shy;вые - поз shy;во shy;ля shy;ющие за shy;пус shy;кать ку shy;сок ко shy;да в цик shy;ле, и ус shy;лов shy;ные - поз shy;во shy;ля shy;ющие вы shy;пол shy;нять нуж shy;ный ку shy;сок ко shy;да, вы shy;би shy;ра shy;емый по ус shy;ло shy;вию. Я опи 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;зом:

for (i = 0; i ‹ 10; i++) { /*Ваш код здесь*/ }

Пос 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;ет цикл.

for (int i = 0; i ‹ 10; i ++) { // цикл на 10 кру shy;гов if (so shy;me_array[i] == 0) { con shy;ti shy;nue;} // ес shy;ли i-тая ячей shy;ка мас shy;си shy;ва рав shy;на 0 - пой shy;ти на след круг int res = Do shy;So shy;met shy;hing(so shy;me_array[i]); // что-то сде shy;лать с ячей shy;кой мас shy;си shy;ва и вер shy;нуть зна shy;че shy;ние if (res == -1) { bre shy;ak;} // ес shy;ли вер shy;ну shy;лось -1 - прер 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;ся так:

whi shy;le (flag == true) { /*Ваш код здесь*/ }

Пос 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;ся так:

fo shy;re shy;ach (Class obj shy;ec shy;t shy;Na shy;me in col shy;lec shy;ti shy;on shy;Na shy;me) { /* Ваш код здесь */ }

Пос 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;ге:

Di shy;rec shy;tor shy;yIn shy;fo di = new Di shy;rec shy;tor shy;yIn shy;fo("C:\\temp"); // соз shy;дать объ shy;ект ин shy;фор shy;ма shy;ции о ка shy;та shy;ло shy;ге С:\temp fo shy;re shy;ach (Fi shy;le shy;In shy;fo fi in di.Get shy;Fi shy;les("*.txt")) { // для каж shy;до shy;го объ shy;ек shy;та ти shy;па Fi shy;le shy;In shy;fo в кол shy;лек shy;ции, воз shy;в shy;ра shy;ща shy;емой фун shy;к shy;ци shy;ей Get shy;Fi shy;les // что-то сде 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;ся так:

if (flag == true) { /* Ваш код здесь */ } else if (flag2 == true) { /* Ваш код здесь */ } else { /* Ваш код здесь */ }

Пос 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;мер:

bo shy;ol flag1 = true, flag2 = fal shy;se; if (flag1 amp; amp; flag2) {Do shy;So shy;met shy;hing(); } else if (flag1) { Do shy;So shy;met shy;hing2(); } else { Do shy;So shy;met shy;hing3(); }

В этом при 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:

int i = 1; if (i == 0) { Do shy;So shy;met shy;hing1(); } else if (i == 1) { Do shy;So shy;met shy;hing2(); } else if (i == 2) {Do shy;So shy;met shy;hing3(); } else { Do shy;El shy;se(); }

В этом, край 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;ся так:

switch (var) { ca shy;se ‹val1›: Do shy;So shy;met shy;hing(); ca shy;se ‹val2›: Do shy;So shy;met shy;hing2(); bre shy;ak; de shy;fa shy;ult: De shy;fa shy;ul shy;tAc shy;ti shy;on(); 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;ний 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;мер:

int i = 1; switch (i) { ca shy;se 2: Do shy;So shy;met shy;hing2(); bre shy;ak; ca shy;se 1: Do shy;So shy;met shy;hing1(); ca shy;se 3: Do shy;So shy;met shy;hing3(); bre shy;ak; de shy;fa shy;ult: Do shy;De shy;fa shy;ult(); bre shy;ak; }

В этом при 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;:

char c = '!'; switch (c) { ca shy;se '?': Do shy;Qu shy;es shy;ti shy;on(); bre shy;ak; ca shy;se '!': Do shy;Ex shy;c shy;la shy;ma shy;ti shy;on(); bre shy;ak; }

В этом при 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;бок:

if (flag == true) re shy;turn;
<p><cite id="BdToc_5"> </cite> Гла shy;ва 5. Инициализация переменных. Коллекции. Типы данных.</p>

Ини shy;ци shy;али shy;за shy;ция.

Я уже упо shy;ми shy;нал это сло shy;во, в та shy;ком при shy;мер shy;но кон shy;тек shy;с shy;те - Пос shy;ле дек shy;ла shy;ра shy;ции пе shy;ре shy;мен shy;ной shy;, пе shy;ред ее ис shy;поль shy;зо shy;ва shy;ни shy;ем, не shy;об shy;хо shy;ди shy;мо эту пе shy;ре shy;мен shy;ную ин shy;ци shy;али shy;зи shy;ро shy;вать. Поп shy;ро shy;бу shy;ем ра shy;зоб shy;рать shy;ся точ shy;нее: ини shy;ци shy;али shy;за shy;ция - про shy;цесс вы shy;де shy;ле shy;ния па 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;ным, то null - это зна shy;че shy;ние по умол shy;ча shy;нию для всех пе shy;ре shy;мен shy;ных клас shy;сов Mar shy;s shy;hal shy;B shy;y shy;Re shy;fe shy;ren shy;ce - об shy;ра shy;ба shy;ты shy;ва shy;емых че shy;рез ука shy;за shy;тель. Ос shy;нов shy;ные ти shy;пы дан shy;ных яв shy;ля shy;ют shy;ся клас shy;са shy;ми Mar shy;s shy;hal shy;B shy;y shy;Va shy;lue - об 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;рым, и об shy;ра shy;ба shy;ты 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; do shy;ub shy;le d = 0.2; string s = "test 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;са:

Da shy;te shy;Ti shy;me dt = new Da shy;te shy;Ti shy;me(); MyClass mc = new MyClass(); int[] in shy;tAr shy;ray = new int[20];

Обра shy;ти shy;те вни shy;ма shy;ние - мас shy;си shy;вы рас shy;смат shy;ри shy;ва shy;ют shy;ся как клас shy;сы.

Для спе shy;ци shy;алис shy;тов: мас shy;сив, как из 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 = new int(); впол shy;не пра shy;виль shy;ная за shy;пись. Бо shy;лее то shy;го, за shy;пись "int i = 2;" для ком shy;пи shy;ля shy;то shy;ра рав shy;на "int i = new int(); i = 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;ма:

pub shy;lic par shy;ti shy;al class Form1 : Form { pub shy;lic Da shy;te shy;Ti shy;me dt = new Da shy;te shy;Ti shy;me();

И пос 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:

Array shy;List al = new Ar shy;ray shy;List(); int i = 2; do shy;ub shy;le d = 4.5; string s = "test"; MyClass mc = new MyClass(); al.Add(i); al.Add(d); al.Add(s); al.Add(mc);

Та shy;ким пу shy;тем мы до shy;ба shy;ви shy;ли са shy;мые раз shy;ные эле shy;мен shy;ты в спи shy;сок и мо shy;жем до лю shy;бо shy;го из них дос shy;ту shy;чать shy;ся как до эле shy;мен shy;та мас shy;си shy;ва:

string s2 = (string)al[2];

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;ся так:

if (var is int) { do so shy;met shy;hing }

вмес 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;пов:

for (int i = 0; i ‹ al.Length; i ++) { if (al[i] is int) { /*сде shy;лать что-то с це shy;лым чис shy;лом */ (int)al[i]} else if (al[i] is do shy;ub shy;le} { /*сде shy;лать что-то с дроб shy;ным чис shy;лом*/ (do shy;ub shy;le)al[i]} else if (al[i] is string} { /*сде shy;лать что-то со стро shy;кой shy;*/ (string)al[i]} else { Mes shy;sa shy;ge shy;Box.Show(al[i].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;об shy;ра shy;зу shy;ем и что-то де shy;ла shy;ем, ес shy;ли нет - по shy;ка shy;зы shy;ва shy;ем в со shy;об shy;ще shy;нии стро shy;ко shy;вое пред shy;с shy;тав shy;ле shy;ние объ shy;ек 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;ся.

do shy;ub shy;le d = 4.2; string s1 = d.ToS shy;t shy;ring(); string s2 = Con shy;vert.ToS shy;t shy;ring(4.2);

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;лать:

Chec shy;k shy;Box cb = new Chec shy;k shy;Box(); obj shy;ect obj = cb; ((Chec shy;k shy;Box)obj).Chec shy;ked = true;

Услов 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;вать как).

string s = al[2] as string;

Опе shy;ра shy;тор го shy;во shy;рит ком shy;пи shy;ля shy;то shy;ру, что под shy;со shy;вы shy;ва shy;емую ему пе shy;ре shy;мен shy;ную на shy;до рас shy;смат shy;ри shy;вать "как" ука shy;зан shy;ный тип дан shy;ных.

<p><cite id="BdToc_6"> </cite> Гла shy;ва 6. Пример кода.</p>

Итак, для пер shy;вой час shy;ти, я ду shy;маю дос shy;та 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;да:

na shy;mes shy;pa shy;ce tst_form2 //за shy;да shy;ем na shy;mes shy;pa shy;ce { pub shy;lic de shy;le shy;ga shy;te do shy;ub shy;le De shy;le shy;ga shy;te1(); // в нем дек shy;ла shy;ри shy;ру shy;ем де shy;ле shy;га shy;та pub shy;lic ab shy;s shy;t shy;ract class MyPa shy;ren shy;t shy;C shy;lass // соз shy;да shy;ем класс, аб shy;с shy;т shy;рак shy;т shy;ный : Obj shy;ect, tst_form3.IIn shy;ter shy;fa shy;ce1 // по shy;рож shy;ден shy;ный от клас shy;са Obj shy;ect с под shy;к shy;лю shy;чен shy;ным ин shy;тер shy;фей shy;сом tst_form3.IIn shy;ter shy;fa shy;ce1 { pri shy;va shy;te int int1; // внут shy;рен shy;нее по shy;ле, дос shy;туп shy;ное толь shy;ко внут shy;ри клас shy;са pro shy;tec shy;ted int Int1 { // свой shy;ст shy;во для это shy;го по shy;ля, дос shy;туп shy;ное нас shy;лед shy;ни shy;кам get { re shy;turn int1; } // воз shy;в shy;рат shy;ный код set { //уста shy;но shy;воч shy;ный код if (va shy;lue › 0) { // про shy;вер shy;ка на зна shy;че shy;ние int1 = va shy;lue; // ес shy;ли прош shy;ли - ус shy;та shy;но shy;вить зна shy;че shy;ние } else throw new Ar shy;gu shy;men shy;tEx shy;cep shy;ti shy;on("Va shy;lue must be › 0", "Int1"); // ес shy;ли нет - ки shy;нуть ошиб shy;ку } } pub shy;lic do shy;ub shy;le d1; // от shy;к shy;ры shy;тые по shy;ля pub shy;lic do shy;ub shy;le d2; // pub shy;lic MyPa shy;ren shy;t shy;C shy;lass() { //основ shy;ной кон shy;с shy;т shy;рук shy;тор клас shy;са int1 = 0; // ини shy;ци shy;али shy;зи shy;ру shy;ем пе shy;ре shy;мен shy;ную на shy;чаль shy;ным зна shy;че shy;ни shy;ем } pub shy;lic MyPa shy;ren shy;t shy;C shy;lass(do shy;ub shy;le inD1, do shy;ub shy;le inD2) // до shy;пол shy;ни shy;тель shy;ный кон shy;с shy;т shy;рук shy;тор клас shy;са : this() { // ко shy;то shy;рый сна shy;ча shy;ла за shy;пус shy;ка shy;ет ос shy;нов shy;ной кон shy;с shy;т shy;рук shy;тор и толь shy;ко по shy;том ис shy;пол shy;ня shy;ет shy;ся d1 = inD1; // ини shy;ци shy;али shy;зи shy;ру shy;ем пе shy;ре shy;мен shy;ные вхо shy;дя shy;щи shy;ми ар shy;гу shy;мен shy;та shy;ми d2 = inD2; // ес 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 ab shy;s shy;t shy;ract do shy;ub shy;le Get shy;Sum(); // шаб shy;лон фун shy;к shy;ции для ини shy;ци shy;али shy;за shy;ции в до shy;чер shy;них клас shy;сах #re shy;gi shy;on IIn shy;ter shy;fa shy;ce1 Mem shy;bers // фун shy;к shy;ции ин shy;тер shy;фей shy;са pub shy;lic ab shy;s shy;t shy;ract do shy;ub shy;le Get shy;Sub shy;s shy;t shy;ract(); // фун shy;к shy;ция ин shy;тер shy;фей shy;са - то shy;же толь shy;ко шаб shy;лон #endre shy;gi shy;on } na shy;mes shy;pa shy;ce tst_form3 // объ shy;яв shy;ля shy;ем еще na shy;mes shy;pa shy;ce внут shy;ри tst_form2 { pub shy;lic class MyChil shy;d shy;C shy;lass //соз shy;да shy;ем класс : tst_form2.MyPa shy;ren shy;t shy;C shy;lass //по shy;рож shy;ден shy;ный от tst_form2.MyPa shy;ren shy;t shy;C shy;lass { pri shy;va shy;te De shy;le shy;ga shy;te1 get shy;Sum shy;Del; // дек shy;ла shy;ри shy;ру shy;ем объ shy;ект де shy;ле shy;га shy;та inter shy;nal MyChil shy;d shy;C shy;lass() //основ shy;ной кон shy;с shy;т shy;рук shy;тор : ba shy;se() { // за shy;пус shy;ка shy;ющий ро shy;ди shy;тель shy;с shy;кий и толь shy;ко по shy;том ис shy;пол shy;ня shy;ющий shy;ся get shy;Sum shy;Del = new De shy;le shy;ga shy;te1(Get shy;Sum); // ини shy;ци shy;али shy;зи shy;ру shy;ем объ shy;ект де shy;ле shy;га shy;та - на фун shy;к shy;цию Get shy;Sum } inter shy;nal MyChil shy;d shy;C shy;lass(do shy;ub shy;le inD1, do shy;ub shy;le inD2) //до shy;пол shy;ни shy;тель shy;ный кон shy;с shy;т shy;рук shy;тор : ba shy;se(inD1, inD2) { // за shy;пус shy;ка shy;ющий до shy;пол shy;ни shy;тель shy;ный ро shy;ди shy;тель shy;с shy;кий кон shy;с shy;т shy;рук shy;тор get shy;Sum shy;Del = new De shy;le shy;ga shy;te1(Get shy;Sum); // ини shy;ци shy;али shy;зи shy;ру shy;ющий объ shy;ект де shy;ле shy;га shy;та } #re shy;gi shy;on in shy;he shy;ri shy;ted mem shy;bers // унас shy;ле shy;до shy;ван shy;ные фун shy;к shy;ции pro shy;tec shy;ted over shy;ri shy;de do shy;ub shy;le Get shy;Sum() { // оп shy;ре shy;де shy;ля shy;ем ро shy;ди shy;тель shy;с shy;кую аб shy;с shy;т shy;рак shy;т shy;ную фун shy;к shy;цию re shy;turn d1 + d2; //воз shy;в shy;ра shy;ща shy;ем сум shy;му } pub shy;lic over shy;ri shy;de do shy;ub shy;le Get shy;Sub shy;s shy;t shy;ract() { // оп shy;ре shy;де shy;ля shy;ем ро shy;ди shy;тель shy;с shy;кую аб shy;с shy;т shy;рук shy;т shy;ную фун shy;к shy;цию re shy;turn d1 - d2; // воз shy;в shy;ра shy;ща shy;ем раз shy;ность } #endre shy;gi shy;on inter shy;nal vo shy;id Chan shy;ge shy;Int1(int inInt) { // соз shy;да shy;ем фун shy;к shy;цию для сме shy;ны зна shy;че shy;ния Int1 = inInt; } pub shy;lic do shy;ub shy;le TryTo shy;Get shy;Sum() { //фун shy;к shy;ция по shy;лу shy;че shy;ния сум shy;мы re shy;turn Sta shy;tic shy;Func.Get shy;Sum shy;F shy;rom shy;C shy;hil shy;d shy;C shy;lass(get shy;Sum shy;Del); // вы shy;зы shy;ва shy;ем ста shy;тич shy;ную фун shy;к shy;цию дру shy;го shy;го клас shy;са с де shy;ле shy;га shy;том для Get shy;Sum } } pub shy;lic in shy;ter shy;fa shy;ce IIn shy;ter shy;fa shy;ce1 //интер shy;фей shy;с { do shy;ub shy;le Get shy;Sub shy;s shy;t shy;ract(); // фун shy;к shy;ции ин shy;тер shy;фей shy;сов объ shy;яв shy;ля shy;ют shy;ся без мо shy;ди shy;фи shy;ка shy;то shy;ров } } inter shy;nal class Sta shy;tic shy;Func //класс для на shy;шей ста shy;тич shy;ной фун shy;к shy;ции { pub shy;lic sta shy;tic do shy;ub shy;le Get shy;Sum shy;F shy;rom shy;C shy;hil shy;d shy;C shy;lass(De shy;le shy;ga shy;te1 del) { re shy;turn del.Invo shy;ke(); // воз shy;в shy;ра shy;ща shy;ем ре shy;зуль shy;тат вы shy;зо shy;ва фун shy;к shy;ции, при shy;пи shy;сан shy;ной к де shy;ле shy;га shy;ту } pub shy;lic enum Sup shy;por shy;ted shy;Lan shy;gu shy;ages //прос shy;той Enum { Рус shy;ский = 1, English = 10, Ger shy;man = 11 } pub shy;lic sta shy;tic obj shy;ect[] obj shy;Ar shy;ray = {1, 2.4, "string", Sup shy;por shy;ted shy;Lan shy;gu shy;ages.Рус shy;ский }; // ста shy;тич shy;ный мас shy;сив } }//зак shy;ры shy;ва shy;ем na shy;mes shy;pa shy;ce tst_form2

Для тес 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;та:

pri shy;va shy;te vo shy;id but shy;ton1_Click(obj shy;ect sen shy;der, Even shy;tArgs e) { //при на shy;жа shy;тии на кноп shy;ку tst_form2.tst_form3.MyChil shy;d shy;C shy;lass mcc = new tst_form2.tst_form3.MyChil shy;d shy;C shy;lass(1.2, 2.4); // соз shy;да shy;ем объ shy;ект на shy;ше shy;го клас shy;са с вве shy;ден shy;ны shy;ми зна shy;че shy;ни shy;ями do shy;ub shy;le tmp_do shy;ub shy;le = mcc.TryTo shy;Get shy;Sum(); //вер shy;нет 3.6 tmp_do shy;ub shy;le = mcc.Get shy;Sub shy;s shy;t shy;ract(); //вер shy;нет -1.2 /*mcc.Chan shy;ge shy;Int1(-2); //про shy;изой shy;дет ошиб shy;ка - не shy;вер shy;ный па shy;ра shy;метр*/ mcc.Chan shy;ge shy;Int1(2); //int1 ста shy;нет ра shy;вен 2 int i1 = (int)tst_form2.Sta shy;tic shy;Func.Sup shy;por shy;ted shy;Lan shy;gu shy;ages.English; // i1 = 10 string s = tst_form2.Sta shy;tic shy;Func.Sup shy;por shy;ted shy;Lan shy;gu shy;ages.English.ToS shy;t shy;ring();//s="English" s = ""; for (int i = 0; i ‹ tst_form2.Sta shy;tic shy;Func.obj shy;Ar shy;ray.Length; i++) { s += tst_form2.Sta shy;tic shy;Func.obj shy;Ar shy;ray[i].ToS shy;t shy;ring() + "\t"; if (tst_form2.Sta shy;tic shy;Func.obj shy;Ar shy;ray[i] is int) s += "\n"; else { switch (tst_form2.Sta shy;tic shy;Func.obj shy;Ar shy;ray[i].Get shy;T shy;y shy;pe().ToS shy;t shy;ring()) { ca shy;se "System.Do shy;ub shy;le": s += Math.Ro shy;und((do shy;ub shy;le)tst_form2.Sta shy;tic shy;Func.obj shy;Ar shy;ray[i]).ToS shy;t shy;ring() + "\n"; bre shy;ak; ca shy;se "tst_form2.Sta shy;tic shy;Func+Sup shy;por shy;ted shy;Lan shy;gu shy;ages": s += ((int)(tst_form2.Sta shy;tic shy;Func.Sup shy;por shy;ted shy;Lan shy;gu shy;ages)tst_form2.Sta shy;tic shy;Func.obj shy;Ar shy;ray[i]).ToS shy;t shy;ring(); bre shy;ak; de shy;fa shy;ult: s += "\n"; bre shy;ak; } } } // цикл за shy;вер shy;ша shy;ет shy;ся s = "1 //2.4 2 //string //Рус shy;ский 1" }

Нем 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;сик.

<p><cite id="BdToc_7"> </cite> Часть 2.</p>

Чуть более сложные вещи в языке C# и платформе .NET.

<p>Глава 1. Модификаторы аргументов. Регулярные выражения.</p>

Рас 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;ции.

При shy;мер:

pri shy;va shy;te vo shy;id Func1(ref string str) { str = "но shy;вая стро shy;ка"; } pri shy;va shy;te vo shy;id Ma shy;in shy;Func() { string str = "стро shy;ка"; Func1(ref str); // str = "но shy;вая стро shy;ка" }

out - пе shy;ре shy;да shy;ет в ка shy;чес shy;т shy;ве ар shy;гу shy;мен shy;та ссыл shy;ку на не shy;ини shy;ци shy;али shy;зи shy;ро shy;ван shy;ный объ 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 vo shy;id Func1(out string re shy;sult1, out int re shy;sult2, out obj shy;ect re shy;sult3) { re shy;sult1 = 10; re shy;sult2 = "ре shy;зуль shy;тат"; re shy;sult3 = new obj shy;ect(); } pri shy;va shy;te vo shy;id Ma shy;in shy;Func() { int r1; string r2; obj shy;ect r3; Func1(out r1, out r2, out r3); }

Раз 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;та.

pa shy;ram - очень хит shy;рая вещь, поз shy;во shy;ля shy;ет де shy;лать фун shy;к shy;ции с пе shy;ре shy;мен shy;ным ко shy;ли shy;чес shy;т shy;вом ар shy;гу shy;мен shy;тов. Тре shy;бо shy;ва shy;ния прос shy;ты - pa shy;ram ар shy;гу shy;мент дол 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 vo shy;id Func1(byte b1, pa shy;ram int[] da shy;ta) {}

Если вам не 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;ным:

pri shy;va shy;te vo shy;id Func1(byte b1, pa shy;ram obj shy;ect[] da shy;ta) { } pri shy;va shy;te vo shy;id Ma shy;in shy;Func() { Func1(1, 1, "str", new obj shy;ect()); // все нор shy;маль shy;но. da shy;ta - мас shy;сив ти shy;па obj shy;ect из трех чле shy;нов. Func1(2, new obj shy;ect[] {1, "str", new obj shy;ect()}); // все нор shy;маль shy;но, da shy;ta - как в пре shy;ды shy;ду shy;щем ва shy;ри shy;ан shy;те. Func1(3, 1, new obj shy;ect[]{"str", new obj shy;ect()}); // da shy;ta - мас shy;сив ти shy;па obj shy;ect из двух чле shy;нов, вто shy;рой - мас shy;сив ти shy;па obj shy;ect из 2х чле 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;лон:

(?‹Pro shy;to shy;col›\w+):\/\/(?‹Do shy;ma shy;in›[\w\.]+)\/?\S*

Этот шаб 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;ния:

vo shy;id Re shy;gex shy;Match() { string inStr = "blah-blah-blah so shy;met shy;hing he shy;re http://www.do shy;ma shy;in.com/index.cgi and so shy;me com shy;ments he shy;re and fi shy;le he shy;re ftp://ftp.do shy;ma shy;in123.info/re shy;po shy;si shy;tory/"; Strin shy;g shy;Bu shy;il shy;der sb = new Strin shy;g shy;Bu shy;il shy;der(); Re shy;gex r = new Re shy;gex(@"(?‹Pro shy;to shy;col›\w+):\/\/(?‹Do shy;ma shy;in›[\w\.]+)\/?\S*", Re shy;ge shy;xOp shy;ti shy;ons.Igno shy;re shy;Ca shy;se | Re shy;ge shy;xOp shy;ti shy;ons.Sin shy;g shy;le shy;li shy;ne); for (Match m = r.Mat shy;ch(inStr); m.Suc shy;cess; m = m.Nex shy;t shy;Match()) { sb.Appen shy;d shy;For shy;mat("Най shy;де shy;но URL: {0}, про shy;то shy;кол: {1}, до shy;мен: {2}\r\n", m.Va shy;lue, m.Gro shy;ups["Pro shy;to shy;col"].Va shy;lue, m.Gro shy;ups["Do shy;ma shy;in"].Va shy;lue); } tex shy;t shy;Box1.Text = sb.ToS shy;t shy;ring(); }

Ре shy;зуль shy;тат бу shy;дет:

Най shy;де shy;но URL: http://www.do shy;ma shy;in.com/index.cgi, про shy;то shy;кол: http, до shy;мен: www.do shy;ma shy;in.com Най shy;де shy;но URL: ftp://ftp.do shy;ma shy;in123.info/re shy;po shy;si shy;tory/, про shy;то shy;кол: ftp, до shy;мен: ftp.do shy;ma shy;in123.info

При 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;го.

<p><cite id="BdToc_8"> </cite> Гла shy;ва 2. Генеалогия классов.</p>

Итак, по shy;го shy;во shy;рим ког shy;да ко shy;го и как нуж shy;но по shy;рож shy;дать.

Один из пос shy;ту shy;ла shy;тов сов shy;ре shy;мен shy;но shy;го вы shy;со shy;ко shy;уров shy;не shy;во shy;го прог shy;рам shy;ми shy;ро shy;ва shy;ния, не всег shy;да вер shy;ных, впро shy;чем, гла shy;сит, что "Чем мень shy;ше оди shy;на shy;ко shy;вых бло shy;ков ко shy;да в прог shy;рам shy;ме - тем луч shy;ше". Пер shy;вое след shy;с shy;т shy;вие из это shy;го пос shy;ту shy;ла shy;та - блок ко shy;да, ко shy;то shy;рый ис shy;поль shy;зу shy;ет shy;ся боль shy;ше, чем в од shy;ном мес shy;те прог shy;рам shy;мы дол shy;жен быть вы shy;не shy;сен в от shy;дель shy;ную фун shy;к shy;цию. Впро shy;чем, это к те shy;ме не от shy;но shy;сит shy;ся. Вто shy;рое след shy;с shy;т shy;вие - на shy;бор пе shy;ре shy;мен shy;ных/фун shy;к shy;ций shy;, ко shy;то shy;рые ис shy;поль shy;зу shy;ют shy;ся боль shy;ше чем в од shy;ном клас shy;се дол shy;ж shy;ны быть вы shy;де shy;ле shy;ны в от shy;дель shy;ный ро shy;ди shy;тель shy;с shy;кий класс. В об shy;щем-то, этим пра shy;ви shy;лом мож shy;но ру shy;ко shy;вод shy;с shy;т shy;во shy;вать shy;ся при оп shy;ре shy;де shy;ле shy;нии "ну shy;жен ли вам не shy;кий ро shy;ди shy;тель для ва shy;ших клас shy;сов?", ес shy;ли у вас их мно shy;го.

Рас shy;смот shy;рим мо shy;дель shy;ную си shy;ту shy;ацию с мно shy;жес shy;т shy;вом клас 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;ция pub shy;lic1, и зак shy;ры shy;тая фун shy;к shy;ция pri shy;va shy;te1. По shy;то shy;мок мо shy;жет об shy;ра shy;тить shy;ся толь shy;ко к pub shy;lic1, но ес shy;ли внут shy;ри ко shy;да pub shy;lic1 есть об shy;ра shy;ще shy;ние к pri shy;va shy;te1, то все бу 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;ция Func1 пе shy;ре shy;оп shy;ре shy;де shy;ле shy;на в клас shy;се B, по shy;том shy;ке клас shy;са А с ис shy;поль shy;зо shy;ва shy;ние сло shy;ва new:

B b1 = new B(); b1.Func1(); // но shy;вый ва shy;ри shy;ант фун shy;к shy;ции. ((A)b1).Func1(); // ста 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;зом

class Class1 : IIn shy;ter shy;fa shy;ce1 { pub shy;lic vo shy;id in shy;ter shy;fa shy;ce shy;Func1() {}; // внут shy;рен shy;няя им shy;п shy;ле shy;мен shy;та shy;ция pub shy;lic vo shy;id IIn shy;ter shy;fa shy;ce1.inter shy;fa shy;ce shy;Func2() {}; // внеш shy;няя им shy;п shy;ле shy;мен shy;та shy;ция }

Импле shy;мен shy;ти shy;ро shy;ва shy;ние внеш shy;ним об shy;ра shy;зом яв shy;но ука shy;зы shy;ва shy;ет на ис shy;точ shy;ник тол shy;ко shy;ва shy;ния ка shy;ко shy;го-ли shy;бо по shy;ля. Та shy;кой под shy;ход поз shy;во shy;ля shy;ет из shy;бе shy;жать оши shy;бок при ком shy;пи shy;ля shy;ции и при пос shy;ле shy;ду shy;ющих об shy;ра shy;ще shy;ни shy;ях. Кста shy;ти, за shy;пом shy;ни shy;те, ес shy;ли вам нуж shy;на от объ shy;ек shy;та фун shy;к shy;ция ка shy;ко 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:

((IIn shy;ter shy;fa shy;ce1)ob1).intFunc1();

Этим вы да 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;ет...

<p><cite id="BdToc_9"> </cite> Глава 3. Исключения.</p>

Исклю 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.

throw new Ex shy;cep shy;ti shy;on("Про 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;ше 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;лать так:

pri shy;va shy;te do shy;ub shy;le func1(do shy;ub shy;le arg1, do shy;ub shy;le arg2) { if (arg1 ‹= 1) throw new Ar shy;gu shy;men shy;tEx shy;cep shy;ti shy;on("Аргу shy;мент дол shy;жен быть боль shy;ше 1", "arg1"); if (arg2 ‹= 1) throw new Ar shy;gu shy;men shy;tEx shy;cep shy;ti shy;on("Аргу shy;мент дол shy;жен быть боль shy;ше 1", "arg2"); // рас shy;чет }

Такой код позволит указать программисту на ошибки. Собственно примерно так и надо писать библиотеки, которыми будут пользоваться другие.

Еще си shy;ту shy;ация ког shy;да на shy;до ки shy;дать ис shy;к shy;лю shy;че 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 { using (Fi shy;leS shy;t shy;re shy;am fs = Fi shy;le.Open shy;Re shy;ad(@"C:\\temp.txt")) { } } catch (Fi shy;le shy;Not shy;Fo shy;un shy;dEx shy;cep shy;ti shy;on ex) { throw new In shy;va shy;li shy;dO shy;pe shy;ra shy;ti shy;onEx shy;cep shy;ti shy;on("Ошиб shy;ка от shy;к shy;ры shy;тия фай shy;ла в мо shy;ей фун shy;к shy;ции...", ex); }

Такой код позволяет поймать и обработать исключение на уровне функции (например, закрыть потоки или еще чего сделать) и передать пойманное исключение дальше, с довеском в виде собственной информации.

Как ло 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;мер:

try { // опас shy;ный код } catch (Argu shy;men shy;tEx shy;cep shy;ti shy;on aex) { Mes shy;sa shy;ge shy;Box.Show(aex.Mes shy;sa shy;ge, "Error oc shy;cu shy;red"); re shy;turn 1; } catch (Excep shy;ti shy;on ex) { throw new In shy;va shy;li shy;dO shy;pe shy;ra shy;ti shy;onEx shy;cep shy;ti shy;on("Cus shy;tom mes shy;sa shy;ge...", ex); } fi shy;nal shy;ly { // зак 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;мер:

using (MyClass obj shy;ect1 = new MyClass()) { // код, ис shy;поль shy;зу shy;ющий obj shy;ect1 }

Да shy;же ес shy;ли код ки shy;нет ис shy;к shy;лю shy;че shy;ние - obj shy;ect1 бу shy;дет уда shy;лен. Для бло shy;ка using не обя shy;за shy;тель shy;на ини shy;ци shy;али shy;за shy;ция а бло shy;ке, мож shy;но и так:

MyClass ob1 = new MyClass(); using (ob1) {}

Кон 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;мер:

MyClass ob1 = new MyClass(); // что-то сде shy;лать с ob1 if (ob1.pro shy;perty1 == 1) { ob1.Dis shy;po shy;se(); re shy;turn 1; } // что-то еще сде shy;лать if (ob1.pro shy;perty1 == 2) { ob1.Dis shy;po shy;se(); re shy;turn 2; }

Что shy;бы не пи shy;сать каж shy;дый раз Dis shy;po shy;se, мож shy;но сде shy;лать так:

using (MyClass ob1 = new MyClass()) { // что-то сде shy;лать с ob1 if (ob1.pro shy;perty1 == 1) re shy;turn 1; // что-то еще сде shy;лать if (ob1.pro shy;perty1 == 2) re shy;turn 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;зо shy;вать shy;ся. Они жрут по shy;ряд shy;ком ре 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 string func1 (string inStr) { if (string.IsNul shy;lO shy;rEm shy;p shy;ty(inStr)) { re shy;turn null; } }

та shy;кой код быс shy;т shy;рее, чем:

pub shy;lic string func1 (string inStr) { if (string.IsNul shy;lO shy;rEm shy;p shy;ty(inStr) { throw new Ar shy;gu shy;men shy;tEx shy;cep shy;ti shy;on(); } }

и уж, тем бо shy;лее, чем:

pub shy;lic string func1 (string inStr) { try { // сде shy;лать что-то с inStr } catch (Argu shy;men shy;tEx shy;cep shy;ti shy;on ex) { throw ex; } }

Те shy;перь рас shy;ска shy;жу о раз shy;ных взгля shy;дах на об shy;щую тех shy;ни shy;ку. Лич shy;но я не счи shy;таю хоть один из этих ме shy;то shy;дов пра shy;виль shy;ным всег shy;да, им shy;хо - дей shy;ст shy;во shy;вать на shy;до по си shy;ту shy;ации. А ос shy;нов shy;ны shy;ми па shy;ра shy;мет shy;ра shy;ми, вли shy;я shy;ющи shy;ми на мой ме shy;тод от shy;ло shy;ва ис shy;к shy;лю shy;че shy;ний яв shy;ля shy;ют shy;ся раз shy;мер прог shy;рам shy;мы, сто shy;имость за shy;ка shy;за и вре shy;мя на соз shy;да shy;ние. Для пок shy;лон shy;ни shy;ков кор shy;по shy;ра shy;тив shy;но shy;го прог shy;рам shy;ми shy;ро shy;ва shy;ния хо shy;чу на shy;пом shy;нить - на shy;пи shy;са shy;ние всех воз shy;мож shy;ных оши shy;бок в прог shy;рам shy;ме вмес shy;те с ком shy;мен shy;та shy;ри shy;ями зай shy;мет вре shy;ме shy;ни боль shy;ше, чем соз shy;да shy;ние все shy;го ос shy;таль shy;но shy;го ко shy;да, без ин shy;тер shy;фей shy;са. И боль shy;шин shy;с shy;т shy;во кли shy;ен shy;тов хо shy;тят прог shy;рам shy;му быс shy;т shy;ро и де shy;ше shy;во, а не дол shy;го и до shy;ро shy;го, но с под shy;роб shy;ны shy;ми ошиб shy;ка shy;ми :). В от shy;ло shy;ве оши shy;бок глав shy;ное, им shy;хо, чтоб ин shy;фор shy;ма shy;ция об от shy;лов shy;лен shy;ной ошиб shy;ке бы shy;ла дос shy;та shy;точ shy;ной для вас, что shy;бы эту ошиб shy;ку най 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;че shy;ния, или ло shy;вить все сра shy;зу. Как пра shy;ви shy;ло, опас shy;ный код мо shy;жет вы shy;ки shy;нуть не один тип ис shy;к shy;лю shy;че shy;ний shy;, а нес shy;коль shy;ко. Од shy;ни лю shy;ди го shy;во shy;рят, что ло shy;вить на shy;до обя shy;за shy;тель shy;но каж shy;дый тип от shy;дель shy;но, дру shy;гие го shy;во shy;рят, что на shy;до ло shy;вить все в од shy;ном бло shy;ке, а уж по shy;том раз shy;би shy;рать shy;ся что про shy;изош shy;ло. Им shy;хо, ес shy;ли ни с од shy;ним ти shy;пом ис shy;к shy;лю shy;че shy;ний поль shy;зо shy;ва shy;тель спра shy;вить shy;ся не мо shy;жет - то ло shy;вить на shy;до все сра shy;зу. Поль shy;зо shy;ва shy;те 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;чать в try - catch блок как мож shy;но мень shy;ше ко shy;да или как мож shy;но боль shy;ше. Мож shy;но соз shy;да shy;вать один блок try catch для всей фун shy;к shy;ции, а мож shy;но соз shy;да shy;вать по бло 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 - бред. Хо shy;тя воз shy;мож shy;ны си shy;ту shy;ации ког shy;да это оп shy;рав shy;да shy;но. Но вот соз shy;да shy;вать по бло shy;ку на каж shy;дую строч shy;ку - это очень уж дол shy;го и нуд shy;но и ред shy;ко име shy;ет смысл.

3.На shy;до ста shy;вить бло shy;ки catch в опас shy;ных строч shy;ках фун shy;к shy;ций и один catch где-то на са shy;мом вер shy;ху прог shy;рам shy;мы, или ста shy;вить гло shy;баль shy;ные от shy;лов shy;щи 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;ный гло shy;баль shy;ный пе shy;рех shy;ват shy;чик ис shy;к shy;лю shy;че shy;ний. Од shy;на shy;ко есть ряд лю shy;дей shy;, ко shy;то shy;рые счи shy;та shy;ют, что та shy;кой от shy;лов shy;щик - сви shy;де shy;тель shy;с shy;т shy;во пло shy;хо shy;го ко shy;да, мол хо shy;ро shy;ший код дол shy;жен от shy;лав shy;ли shy;вать все ошиб shy;ки там, где они воз shy;ни shy;ка shy;ют, а не на уров shy;не 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;нос shy;ти прог shy;рам shy;мы. Ес shy;ли прог shy;рам shy;ма ис shy;поль shy;зу shy;ет па shy;ру де shy;сят shy;ков биб shy;ли shy;отек, на shy;пи shy;сан shy;ных раз shy;ны shy;ми людь shy;ми и мо shy;жет за shy;ни shy;мать shy;ся од shy;нов shy;ре shy;мен shy;но нес shy;коль shy;ки shy;ми раз shy;ны shy;ми за shy;да shy;ча shy;ми - то нес shy;коль shy;ко пе shy;рех shy;ват shy;чи shy;ков име shy;ют смысл. Ес shy;ли прог shy;рам shy;ма од shy;но shy;по shy;точ shy;ная и на shy;пи shy;са shy;на од shy;ним прог shy;рам shy;мис shy;том - то вряд ли, од shy;но shy;го об shy;ще shy;го пе shy;рех shy;ват shy;чи shy;ка дол shy;ж shy;но хва shy;тить.

И на shy;пос shy;ле shy;док - пом shy;ни shy;те, что пос shy;ле от shy;ло shy;ва ис shy;к shy;лю shy;че shy;ния прог shy;рам shy;ма час shy;то ос shy;та shy;ет shy;ся в не shy;ком про shy;ме shy;жу shy;точ shy;ном сос shy;то shy;янии - по shy;ло shy;ви shy;на зап shy;ро shy;шен shy;ных поль shy;зо shy;ва shy;те shy;лем дей shy;ст shy;вий вы shy;пол shy;не shy;на, вто shy;рая нет. Так что ра shy;бо shy;тать на shy;до ос shy;то shy;рож shy;но, что shy;бы не вой shy;ти в бес shy;ко shy;неч shy;ный цикл оши shy;бок. Осо shy;бен shy;но это ка shy;са shy;ет shy;ся еди shy;но shy;го пе shy;рех shy;ват shy;чи shy;ка. Ес shy;ли прог shy;рам shy;ма прос shy;тая, то в ко shy;де пе shy;рех shy;ват shy;чи shy;ка дол shy;ж shy;но быть при shy;ве shy;де shy;ние прог shy;рам shy;мы к ра shy;бо shy;че shy;му сос shy;то shy;янию. Ес shy;ли прог shy;рам shy;ма боль shy;шая и слож shy;ная - то вез shy;де, где по shy;яв shy;ле shy;ние ис shy;к shy;лю shy;че shy;ния гро shy;зит на shy;ру shy;ше shy;ни shy;ем хо shy;да прог shy;рам shy;мы дол shy;жен сто shy;ять свой ло shy;вец.

<p><cite id="BdToc_10"> </cite> Гла shy;ва 4. Мультипоточность.</p>

Муль 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;ц