MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_NextPart_01C6E59F.7229A350" Данный документ является веб-страницей в одном файле, также называемой файлом веб-архива. Если вы видите это сообщение, значит данный обозреватель или редактор не поддерживает файлы веб-архива. Загрузите обозреватель, поддерживающий веб-архивы, например Microsoft Internet Explorer. ------=_NextPart_01C6E59F.7229A350 Content-Location: file:///C:/64525993/file8483.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset="windows-1251"
СОДЕРЖАНИЕ
 = ;
 = ;
 = ;
 = ; Самые основные вещи в языке C# и платформе .NET вцелом.
 = ;
Глава 1. Как читать чужой код.
&nb= sp;
По просьбам читателей, по= пытался написать об основах языка. Впрочем, только приступив понял, что д= ело гиблое - чтобы писать об основах надо быть или МУДрым АКадемикОМ,= или действительно иметь талант преподавателя. Я такового таланта= не имею. Поэтому смогу только кратко рассказать о некоторых особен= ностях. Поняв, что от такого толку мало, я решил написать для начала как = читать чужой код. Ибо, насколько я понимаю, основные проблемы с понима= нием кода кроются не в незнании, а в неумении эти самые знания добыть.= В этой области писать проще, т.к. мне часто приходится читать чужой код, самого разного уровня и на самых разных, в том числе неизвес= тных мне, языках.
Кратко о языке
Итак язык C# вырос из C++, со= хранив основные особенности синтаксиса и операторы. Да и основные опе= раторы одинаковы во всех языках, так что если вы знаете хоть один язык, то у= вас не должно возникать вопроса что такое for, if...then...else, do...wh= ile и пр. Не самый распространенный оператор использующийся в C# -= foreach. Собственно делает то, что обозначает - "for each =3D для каж= дого", т.е. проводит цикл для каждого члена из массива/коллекции/списка.=
Особенностью всех С-подобных= языков является ограничивание блоков кода фигурными скобками, в от= личии от, например, Basic, в котором все окончания обозначаются как End что-то (Sub, If и пр.). Ну и еще одна особенность - любовь к сокраще= ниям всего чего только можно.
В .NET вцелом появилось нес= колько особенностей - например, изчезли основные типы данных. Теперь к= лючевые слова double и int не представляют собой последовательность ба= йт в памяти, а являются краткой записью для System.Double и System.Int32 (на 32-х разрядных машинах) соответственно. Появились интерфе= йсы, позволяющие описать набор функций, необходимых для совместим= ости с каким-либо классом, и еще много чего, в основном не нужного нов= ичкам.
И не надо забывать, что в .= NET сохранена система windows сообщений и событий. Так что иметь пре= дставление о том, как работает Windows операционка необходимо хотя бы на = начальном уровне.
Основы работы системы= b>
Специалистов заранее прошу = не кривится - я буду писать только о самых основах и простым языком. То что нас= интересует - это система событий (event) и их контроля. Что бы ни произошло в= компе - дернулась мышка, нажали клавишу или открыли окно - это превра= щается в event. Event'ы бывают разные - на все случаи жизни. При желании вам никто не мешает сделает свое событие, впрочем это довольно редко= нужно, хотя уметь полезно. Когда Event создан - он рассылается всем заин= тересованым лицам :), своего рода рассылка по интересам. Ваша программа, ес= ли она хочет получать информацию о каких-то событиях - должна под= писаться на них. Все довольно просто:
Если вам надо чтобы ваша пр= ограмма получала информацию о событии нажатия кнопки - подпишитесь:= p>
&nb= sp;кнопка1.Click +=3D new EventHandler(нажалиКнопку);
Этой строчкой вы включаете = функцию "нажалиКнопку" в список рассылки информации о событии "Click" (нажатие) для кнопки "кнопка1". Помнить на= до только об одном - любые владельцы рассылок люди хитрые, конкурен= тов не любят и рассылают только "своим", что в переводе на п= рограммирование значит - функция, которую вы вносите в список должна быть именно= такого вида, какого ждут в списке, иначе не примут. Последний момент - Ev= entHandler - это посредник между списком рассылки и получателем, именно он = держит имя функции, которой надо сообщить о событии. EventHandler'ов столько же, сколько и разных event'ов, и он тоже должен быть именно т= ого типа, который ждут.
Как читать чужой код<= /p>
Конечно код бывает разный,= и чтобы читать чужой код, который написан на слабознакомом языке, без ко= мментариев и в непривычной манере нужно не только умение, но и изрядная доля удачи и интуиции. Однако если код довольно простой и написан с к= омментариями, хотя бы с какими-то, то прочитать его проблем обычно не составляе= т. Большой плюс C# в этом отношении, это возможность вбить непонятную строчку в Google или MSDN и почти наверняка найдется пример с под= робным описанием, или что-то подобное. Больше чем про C#, среди .NET языко= в, в сети только про VB написано.
Итак, разбор кода. Рассмот= рим код внутри функции, так как все остальное обычно вопросов не вызы= вает.
Код, как привило, структур= ирован - или форматирован табуляцией, или как-то иначе (например regi= on'ами). Очень часто каждый блок имеет комментарий, описывающий произво= димую внутри операцию - например, "Чтение файла", "Заполн= ение таблицы", "Подбор размеров". Таким образом, мы знае= т что там происходит, осталось понять как. Большинство, т.е. поч= ти все, функции и свойства стандартных классов обладают названия= ми точно описывающими их действия. Если вы не знаете английский - = попробуйте сначала перевести название функции, разбив его на отдельные сло= ва по большим буквам: GetChildFromPoint =3D Get Child From Point =3D= Получить Ребенка Из Точки - получить дочерний элемент управления, наход= ящийся в точке. Другой вариант - переводить имя класса и функцию: Conve= rt.ToString =3D Convert To String =3D Перевести В Строку. Некоторые термины, = конечно, придется поискать в сети и после перевода. А некоторые переве= сти понятно не получится, поэтому придется понять, что именно функ= ция делает. Например, в такой вот строчке:
&nb=
sp;largerImagesComboBox.DataSource
=3D Enum.GetNames(typeof(DesktopBackgroundStyle));
даже если вы понятия не име= ете что такое Enum, можно многое понять из простого перевода: объект = ComboBox (выпадающее окно), его свойство Источник Данных (DataSource) п= риравнивается чему-то непонятному. Логично предположить, что источник данных= указывает на какого-либо вида список значений. Функция, предположим неиз= вестного, класса Enum называется GetNames - получить имена, возвращает = она массив строк, который и заполнит выпадающее окно значениями.
Подведем итоги - ничего тол= ком полезного я не сказал. Все мои советы можно свести к трем фразам:<= /p>
1. внимательно читайте ко= д
2. учите английский, кто = не знает
3. пользуйтесь справкой (MS= DN) и Google'ом.
&nb= sp;
Вторая попытка написать чт= о-то полезное для совсем начинающих в С#.
Чуть-чуть о структуре кода:= верхним элементом структуры являются пространства имен (namespace), = довольно фиктивная вешь, призванная упорядочить ту кучу классов, списков, = интерфейсов и констант, которые уже существуют и будут создаваться. В name= space могут входить другие namespace, классы, enum, константы и интер= фейсы. Класс состоит из функций, переменных и констант. По поводу пер= еменных - они могут быть объявлены на любом уровне, и существовать будут только в пределах (и во время жизни) того блока, в котором объяв= лены. Например: переменная объявленная в классе доступна для всего кл= асса, часто для других классов, живет все время, пока жив класс (если он ст= атичный) или объект класса (если не статичный). Другой пример: переменная = объявленная в пределах блока if { }, который находится внутри блока for { }, = который находится внутри функции класса... такая переменная будет дост= упна только в пределах блока if {}, в котором объявлена и будет жить п= ока не закончится выполнение блока, т.е. даже до конца функции не до= живет.
О том, что такое статическ= ий класс, что значит переменная объявлена и пр - читайте ниже.
Синтаксис деклараций=
Декларации - или объявления= - это определение имени и формирование типа, прикрепляемого к этому имени. Т.е. если вам нужно место для хранения целого числа, вы дол= жны объявить переменную, с понятным вам именем, типа данных целое (in= t). К слову, int =3D integer =3D целое число. И помните, декларация н= е создает объект и не выделяет память - это только закрепление имени за ти= пом. Для создания декларированного объекта необходимо его инициа= лизировать (или определить), т.е. либо присвоить начальное значение, либо з= апустить конструктор.
Декларация классов, функций= и переменных на уровне класса требует указания модификатора доступа. Впроч= ем, если не указывать будет использован стандартный, обычно priva= te. Модификаторы доступа - это ключевые слова, определяющие, отк= уда можно будет получить доступ к декларированной переменной/фун= кции и пр. Их всего несколько:
private - доступ возм= ожен только изнутри класса, в котором объявлена.
protected - доступ воз= можен из этого класса и всех наследников.
internal - доступ воз= можен из всей assembly (сборки/библиотеки, файла короче). Также примен= яется для классов, enum и интерфейсов.
public - доступ возмо= жен откуда угодно. Также применяется для классов, enum и интерфейсо= в.
Есть еще модификаторы сос= тояния, определяющие принципиальн