Книга представляет собой пособие по изучению языка программирования C#, который является одним из важных элементов платформы Microsoft .NET. Основные задачи пособия заключаются:
При описании синтаксиса некоторых языковых конструкций C# 2.0 в книге использовалась нотация Бэкуса-Наура. Формы Бэкуса-Наура (БНФ) традиционно применяются при описании грамматики формальных языков (в том числе и языков программирования). Несмотря на непривычный внешний вид, эти формы достаточно просто интерпретируются, отличаются лаконичностью и точностью. Они состоят из доступных пониманию буквосочетаний, называемых нетерминальными и терминальными символами. Особого внимания в БНФ заслуживает символ ' ::= ', который в буквальном смысле переводится как "СОСТОИТ ИЗ". Определение языковой конструкции в БНФ предполагает размещение какого-либо ::= '. В правой части формы размещается последовательность нетерминальных и терминальных символов, отображающих структуру определяемого понятия. Терминальные символы не требуют расшифровки (дополнительных БНФ), поскольку являются конструкциями описываемого языка программирования. Некоторые элементы в рамках БНФ заключаются в прямые скобки. Так в данной нотации обозначаются те элементы описываемой синтаксической конструкции, количество вхождений которых с точки зрения синтаксиса не ограничено. В данном контексте их может быть один, два, три, ..., много, а может и не быть вовсе.
Материал книги основан на находящейся в открытом доступе литературе по C# и .NET. При изучении C# следует иметь в виду одно универсальное правило. Изучение нового языка программирования, новой платформы, новой технологии требует прочтения по крайней мере нескольких из ставших на сегодняшний день классическими книг. Часть из этих книг приведена в списке литературы.
В книге содержится большое количество примеров. В ряде случаев это всего лишь документированные фрагменты программного кода. Однако значительная часть приводимых примеров является законченными работающими приложениями. И хотя к книге НЕ прилагается никаких контрольных вопросов, упражнений или задач, необходимым условием успешного усвоения материала (и обязательным заданием!) является воспроизведение, анализ и модификация приводимого в пособии кода.
В примерах часто используются операторы консольного вывода вида
System.Console.WriteLine(...);
До момента подробного обсуждения темы ввода/вывода в соответствующем разделе пособия предложения этого вида можно рассматривать как "волшебные" заклинания, в результате которых в окошке консольного приложения появляются последовательности выводимых символов.
ПЛАТФОРМА – в контексте информационных технологий – среда, обеспечивающая выполнение программного кода. Платформа определяется характеристиками процессоров, особенностями операционных систем.
Framework – это инфраструктура среды выполнения программ, нечто, определяющее особенности разработки и выполнения программного кода на данной платформе. Предполагает средства организации взаимодействия с операционной системой и прикладными программами, методы доступа к базам данных, средства поддержки распределенных (сетевых) приложений, языки программирования, множества базовых классов, унифицированные интерфейсы пользователя, парадигмы программирования.
Microsoft .NET – платформа.
.NET Framework – инфраструктура платформы Microsoft .NET. Включает следующие основные компоненты: Common Language Runtime (CLR) и .NET Framework Class Library (.NET FCL).
CLS (Common Language Specification) – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компиляторов в среде .NET Framework. Библиотеки, построенные в соответствии с CLS, могут быть использованы из любого языка программирования, поддерживающего CLS. Языки, соответствующие CLS (к их числу относятся языки Visual C# 2.0, Visual Basic, Visual C++), могут интегрироваться друг с другом. CLS – это основа межъязыкового взаимодействия в рамках платформы Microsoft .NET.
CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина. Обеспечивает выполнение сборки. Основной компонент .NET Framework. Под Виртуальной Машиной понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение (управляемого) программного кода.
Управляемый код – программный код, который при своем выполнении способен использовать службы, предоставляемые CLR. Соответственно, неуправляемый код подобной способностью не обладает. Об особенностях управляемого кода можно судить по перечню задач, решение которых возлагается на CLR:
Короче, CLR – это набор служб, необходимых для выполнения управляемого кода.
Сама CLR состоит из двух главных компонентов: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll). Наличие этих файлов на диске – верный признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы .NET.
Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в нее встраивается специальная информация, которая при запуске приложения (EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство
FCL (.NET Framework Class Library) – соответствующая CLS-спецификации объектно-ориентированная библиотека классов, интерфейсов и системы типов (типов-значений), которые включаются в состав платформы Microsoft .NET.
Эта библиотека обеспечивает доступ к функциональным возможностям системы и предназначена служить основой при разработке .NET-приложений, компонент, элементов управления.
.NET библиотека классов является вторым компонентом CLR.
.NET FCL могут использовать ВСЕ .NET-приложения, независимо от назначения архитектуры используемого при разработке языка программирования, и в частности:
.NET-приложение – приложение, разработанное для выполнения на платформе Microsoft .NET. Реализуется на языках программирования, соответствующих CLS.
MSIL (
Фактически MSIL является ассемблером виртуального процессора.
МЕТАДАННЫЕ – при преобразовании программного кода в MSIL также формируется блок МЕТАДАННЫХ, который содержит информацию о данных, используемых в программе. Фактически это наборы таблиц, которые включают в себя информацию о типах данных, определяемых в модуле (о типах данных, на которые ссылается данный модуль). Ранее такая информация сохранялась отдельно. Например, приложение могло включать информацию об интерфейсах, которая описывалась на
В частности, метаданные используются для:
Языки, для которых реализован перевод на MSIL:
и еще много других языков.
Исполняемый модуль – независимо от компилятора (и входного языка) результатом трансляции .NET-приложения является управляемый исполняемый модуль (управляемый модуль). Это стандартный переносимый исполняемый (PE – Portable Executable) файл Windows.
Элементы управляемого модуля представлены в таблице.
| Заголовок PE | Показывает тип файла (например, DLL), содержит временную метку (время сборки файла), содержит сведения о выполняемом коде |
| Заголовок CLR | Содержит информацию для среды выполнения модуля (версию требуемой среды исполнения, характеристики метаданных, ресурсов и т.д.). Собственно, эта информация делает модуль управляемым |
| Метаданные | Таблицы метаданных: 1) типы, определенные в исходном коде; 2) типы, на которые имеются в коде ссылки |
| IL | Собственно код, который создается компилятором при компиляции исходного кода. На основе IL в среде выполнения впоследствии формируется множество команд процессора |
Управляемый модуль содержит управляемый код.
Управляемый код – это код, который выполняется в среде CLR. Код строится на основе объявляемых в исходном модуле структур и классов, содержащих объявления методов. Управляемому коду должен соответствовать определенный уровень информации (метаданных) для среды выполнения. Код C#, Visual Basic, и JScript является управляемым по умолчанию. Код Visual C++ не является управляемым по умолчанию, но компилятор может создавать управляемый код, для этого нужно указать аргумент в командной строке(/CLR). Одной из особенностей управляемого кода является наличие механизмов, которые позволяют работать с УПРАВЛЯЕМЫМИ ДАННЫМИ.
Управляемые данные – объекты, которые в ходе выполнения кода модуля размещаются в управляемой памяти (в управляемой куче) и уничтожаются сборщиком мусора CLR. Данные C#, Visual Basic и JScript .NET являются управляемыми по умолчанию. Данные C# также могут быть помечены как неуправляемые.
Сборка (Assembly) – базовый строительный блок приложения в .NET Framework.
Декларация сборки (Manifest) – составная часть сборки. Это еще один набор таблиц метаданных, который:
Эта информация используется в период выполнения для поддержки корректной работы приложения.
Процессор НЕ МОЖЕТ выполнять IL-код. Перевод IL-кода осуществляется JIT-компилятором (Just In Time – в нужный момент), который активизируется CLR по мере необходимости и выполняется процессором. При этом результаты деятельности JIT-компилятора сохраняются в оперативной памяти. Между фрагментом оттранслированного IL-кода и соответствующим блоком памяти устанавливается соответствие, которое в дальнейшем позволяет CLR передавать управление командам процессора, записанным в этом блоке памяти, минуя повторное обращение к JIT-компилятору.
В среде CLR допускается совместная работа и взаимодействие компонентов программного обеспечения, реализованных на различных языках программирования.
На основе ранее сформированного блока метаданных CLR обеспечивает ЭФФЕКТИВНОЕ взаимодействие выполняемых .NET-приложений.
Для CLR все сборки одинаковы, независимо от того, на каких языках программирования они были написаны. Главное – это чтобы они соответствовали CLS. Фактически CLR разрушает границы языков программирования (cross-language interoperability). Таким образом, благодаря CLS и CTS, .NET-приложения оказываются приложениями на MSIL (IL).
CLR берет на себя решение многих проблем, которые традиционно находились в зоне особого внимания разработчиков приложений. К числу функций, выполняемых CLR, относятся:

Структура среды выполнения CLR (основные функциональные элементы среды) представлена на рисунке.
Строгий контроль типов, в частности, предполагает проверку соответствия типа объекта диапазону значений, которые могут быть присвоены данному объекту.
Защита .NET (безопасность) строится поверх системы защиты операционной системы компьютера. Она не дает пользователю или коду делать то, что делать не позволено, и накладывает ограничения на выполнение кода. Например, можно запретить доступ некоторым секциям кода к определенным файлам.
Функциональные блоки CLR Code Manager и
Exception Manager включает следующие компоненты:
Ниже представлена схема выполнения .NET-приложения в среде CLR.

AppDomain (домен приложения) – это логический контейнер сборок, который используется для изоляции приложения в рамках адресного пространства процесса. Код, выполняемый в CLR (CLR-процесс), отделен от других процессов, выполняемых на компьютере в это же самое время. Обычный процесс запускается системой в рамках специально выделяемого процессу адресного пространства. CLR предоставляет возможность выполнения множества управляемых приложений в ОДНОМ ПРОЦЕССЕ. Каждое управляемое приложение связывается с собственным
Свойства доменов:
GAC (Global Assembly Cache – Общий КЭШ сборок). Для выполнения .NET-приложения достаточно разместить относящиеся к данному приложению сборки в одном каталоге. Если при этом сборка может быть использована в нескольких приложениях, то она размещается и регистрируется с помощью специальной утилиты в GAC.
CTS –
Пространство имен – это способ организации системы типов в единую группу. В рамках .NET существует единая (общеязыковая) библиотека базовых классов. Концепция пространства имен обеспечивает эффективную организацию и навигацию по этой библиотеке. Вне зависимости от языка программирования, доступ к определенным классам обеспечивается за счет их группировки в рамках общих пространств имен.
| System | |
| System.Data | Классы для обращения к базам данных |
| System.Data.Common | |
| System.Data.OleDb | |
| System.Data.SqlClient | |
| System.Collections | Классы для работы с контейнерными объектами |
| System.Diagnostics | Классы для трассировки и отладки кода |
| System.Drawing | Классы графической поддержки |
| System.Drawing.Drawing2D | |
| System.Drawing.Printing | |
| System.IO | Поддержка ввода/вывода |
| System.Net | Поддержка передачи данных по сетям |
| System.Reflection | Работа с пользовательскими типами во время выполнения приложения |
| System.Reflection.Emit | |
| System.Runtime.InteropServices | Поддержка взаимодействия с "обычным кодом" – DLL, COM-серверы, удаленный доступ |
| System.Runtime.Remoting | |
| System.Security | Криптография, разрешения |
| System.Threading | Работа с потоками |
| System.Web | Работа с web-приложениями |
Выполнение неуправляемых исполняемых модулей (обычные Windows-приложения) обеспечивается непосредственно системой Windows. Неуправляемые модули выполняются в среде Windows как "простые" процессы. Процесс характеризуется замкнутым адресным пространством. При этом необходимая для выполнения программы информация (данные) размещается в различных областях адресного пространства процесса, которые называются стеком и кучей. Эти области имеют различное назначение и механизмы управления.
Информация в стеке и куче представляется в виде последовательностей битов с четко определенными свойствами. Такие последовательности называются объектами. Множество неизменяемых свойств, которые могут служить для классификации различных объектов (количество байтов последовательности, формат представления информации в последовательности, операции, определенные над объектом), задают тип объекта.
Таким образом, при выполнении программы в стеке и куче размещаются объекты различных типов.
В стеке размещается информация, необходимая для выполнения программного кода (реализация механизма вызова функций, поддержка операторов управления, сохранение значений локальных переменных). Основным механизмом управления стеком является указатель стека. Освобождение стека происходит в результате перемещения указателя стека, которое связано с выполнением операторов программы.
В куче размещаются используемые в программе данные. Они структурированы и представлены объектами различных типов. Размещение объектов в куче происходит в результате выполнения специального оператора new. Основным механизмом управления кучи является сборщик мусора (
Ссылкой (ссылкой на объект) называется объект, который определен на множестве значений, представленных адресами оперативной памяти в рамках процесса. Если значением ссылки является адрес конкретного объекта, ссылка считается определенной. Ссылка на объект не определена, если ее значение не соответствует адресу какого-либо объекта. Неопределенное значение ссылки в программе кодируется специальным обозначением (null). Особых ограничений на месторасположение ссылки не существует. Ссылка может располагаться как в стеке, так и в куче.
Сборка мусора – механизм, позволяющий CLR определить, когда объект становится недоступен в управляемой памяти программы. При сборке мусора управляемая память освобождается. Для разработчика приложения наличие механизма сборки мусора означает, что он больше не должен заботиться об освобождении памяти. Однако это может потребовать изменения в стиле программирования, например, особое внимание следует уделять процедуре освобождения системных ресурсов. Необходимо реализовать методы, освобождающие системные ресурсы, находящиеся под управлением приложения.
Имеет смысл воспринимать языки программирования высокого уровня как ОБЫЧНЫЕ ИНОСТРАННЫЕ ЯЗЫКИ.
На английском, французском, китайском и т.д. языках можно сформулировать собственные мысли таким образом, чтобы они были понятны носителю данного иностранного языка.
Языки программирования позволяют аналогичным образом "общаться" с электронными устройствами.
Программист владеет естественным языком.
Для электронного устройства "понятна" специфическая система команд.
Общение на естественном языке пока невозможно для устройств.
Общение на машинном языке неудобно для программиста.
Компромиссным решением является разработка "промежуточного" языка – языка программирования. Она ведется в соответствии с некоторыми представлениями о том, КАК можно описать что-либо на языке программирования таким образом, чтобы это описание, несмотря на специфику "слушателя" было бы максимально простым и понятным для всех участников общения. Эти представления о способах изложения мысли на языке программирования формулируются в виде системы общих принципов, которые формируют парадигму программирования.
За более чем полувековой период развития информационных технологий парадигмы менялись несколько раз. Современные языки программирования разрабатываются в соответствии с парадигмой Объектно-Ориентированного Программирования (ООП), которая основана на нижеследующих принципах.
Книга представляет собой пособие по изучению языка программирования C#, который является одним из важных элементов платформы Microsoft .NET. Основные задачи пособия заключаются:
При описании синтаксиса некоторых языковых конструкций C# 2.0 в книге использовалась нотация Бэкуса-Наура. Формы Бэкуса-Наура (БНФ) традиционно применяются при описании грамматики формальных языков (в том числе и языков программирования). Несмотря на непривычный внешний вид, эти формы достаточно просто интерпретируются, отличаются лаконичностью и точностью. Они состоят из доступных пониманию буквосочетаний, называемых нетерминальными и терминальными символами. Особого внимания в БНФ заслуживает символ ' ::= ', который в буквальном смысле переводится как "СОСТОИТ ИЗ". Определение языковой конструкции в БНФ предполагает размещение какого-либо ::= '. В правой части формы размещается последовательность нетерминальных и терминальных символов, отображающих структуру определяемого понятия. Терминальные символы не требуют расшифровки (дополнительных БНФ), поскольку являются конструкциями описываемого языка программирования. Некоторые элементы в рамках БНФ заключаются в прямые скобки. Так в данной нотации обозначаются те элементы описываемой синтаксической конструкции, количество вхождений которых с точки зрения синтаксиса не ограничено. В данном контексте их может быть один, два, три, ..., много, а может и не быть вовсе.
Материал книги основан на находящейся в открытом доступе литературе по C# и .NET. При изучении C# следует иметь в виду одно универсальное правило. Изучение нового языка программирования, новой платформы, новой технологии требует прочтения по крайней мере нескольких из ставших на сегодняшний день классическими книг. Часть из этих книг приведена в списке литературы.
В книге содержится большое количество примеров. В ряде случаев это всего лишь документированные фрагменты программного кода. Однако значительная часть приводимых примеров является законченными работающими приложениями. И хотя к книге НЕ прилагается никаких контрольных вопросов, упражнений или задач, необходимым условием успешного усвоения материала (и обязательным заданием!) является воспроизведение, анализ и модификация приводимого в пособии кода.
В примерах часто используются операторы консольного вывода вида
System.Console.WriteLine(...);
До момента подробного обсуждения темы ввода/вывода в соответствующем разделе пособия предложения этого вида можно рассматривать как "волшебные" заклинания, в результате которых в окошке консольного приложения появляются последовательности выводимых символов.
ПЛАТФОРМА – в контексте информационных технологий – среда, обеспечивающая выполнение программного кода. Платформа определяется характеристиками процессоров, особенностями операционных систем.
Framework – это инфраструктура среды выполнения программ, нечто, определяющее особенности разработки и выполнения программного кода на данной платформе. Предполагает средства организации взаимодействия с операционной системой и прикладными программами, методы доступа к базам данных, средства поддержки распределенных (сетевых) приложений, языки программирования, множества базовых классов, унифицированные интерфейсы пользователя, парадигмы программирования.
Microsoft .NET – платформа.
.NET Framework – инфраструктура платформы Microsoft .NET. Включает следующие основные компоненты: Common Language Runtime (CLR) и .NET Framework Class Library (.NET FCL).
CLS (Common Language Specification) – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компиляторов в среде .NET Framework. Библиотеки, построенные в соответствии с CLS, могут быть использованы из любого языка программирования, поддерживающего CLS. Языки, соответствующие CLS (к их числу относятся языки Visual C# 2.0, Visual Basic, Visual C++), могут интегрироваться друг с другом. CLS – это основа межъязыкового взаимодействия в рамках платформы Microsoft .NET.
CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина. Обеспечивает выполнение сборки. Основной компонент .NET Framework. Под Виртуальной Машиной понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение (управляемого) программного кода.
Управляемый код – программный код, который при своем выполнении способен использовать службы, предоставляемые CLR. Соответственно, неуправляемый код подобной способностью не обладает. Об особенностях управляемого кода можно судить по перечню задач, решение которых возлагается на CLR:
Короче, CLR – это набор служб, необходимых для выполнения управляемого кода.
Сама CLR состоит из двух главных компонентов: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll). Наличие этих файлов на диске – верный признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы .NET.
Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в нее встраивается специальная информация, которая при запуске приложения (EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство
FCL (.NET Framework Class Library) – соответствующая CLS-спецификации объектно-ориентированная библиотека классов, интерфейсов и системы типов (типов-значений), которые включаются в состав платформы Microsoft .NET.
Эта библиотека обеспечивает доступ к функциональным возможностям системы и предназначена служить основой при разработке .NET-приложений, компонент, элементов управления.
.NET библиотека классов является вторым компонентом CLR.
.NET FCL могут использовать ВСЕ .NET-приложения, независимо от назначения архитектуры используемого при разработке языка программирования, и в частности:
.NET-приложение – приложение, разработанное для выполнения на платформе Microsoft .NET. Реализуется на языках программирования, соответствующих CLS.
MSIL (
Фактически MSIL является ассемблером виртуального процессора.
МЕТАДАННЫЕ – при преобразовании программного кода в MSIL также формируется блок МЕТАДАННЫХ, который содержит информацию о данных, используемых в программе. Фактически это наборы таблиц, которые включают в себя информацию о типах данных, определяемых в модуле (о типах данных, на которые ссылается данный модуль). Ранее такая информация сохранялась отдельно. Например, приложение могло включать информацию об интерфейсах, которая описывалась на
В частности, метаданные используются для:
Языки, для которых реализован перевод на MSIL:
и еще много других языков.
Исполняемый модуль – независимо от компилятора (и входного языка) результатом трансляции .NET-приложения является управляемый исполняемый модуль (управляемый модуль). Это стандартный переносимый исполняемый (PE – Portable Executable) файл Windows.
Элементы управляемого модуля представлены в таблице.
| Заголовок PE | Показывает тип файла (например, DLL), содержит временную метку (время сборки файла), содержит сведения о выполняемом коде |
| Заголовок CLR | Содержит информацию для среды выполнения модуля (версию требуемой среды исполнения, характеристики метаданных, ресурсов и т.д.). Собственно, эта информация делает модуль управляемым |
| Метаданные | Таблицы метаданных: 1) типы, определенные в исходном коде; 2) типы, на которые имеются в коде ссылки |
| IL | Собственно код, который создается компилятором при компиляции исходного кода. На основе IL в среде выполнения впоследствии формируется множество команд процессора |
Управляемый модуль содержит управляемый код.
Управляемый код – это код, который выполняется в среде CLR. Код строится на основе объявляемых в исходном модуле структур и классов, содержащих объявления методов. Управляемому коду должен соответствовать определенный уровень информации (метаданных) для среды выполнения. Код C#, Visual Basic, и JScript является управляемым по умолчанию. Код Visual C++ не является управляемым по умолчанию, но компилятор может создавать управляемый код, для этого нужно указать аргумент в командной строке(/CLR). Одной из особенностей управляемого кода является наличие механизмов, которые позволяют работать с УПРАВЛЯЕМЫМИ ДАННЫМИ.
Управляемые данные – объекты, которые в ходе выполнения кода модуля размещаются в управляемой памяти (в управляемой куче) и уничтожаются сборщиком мусора CLR. Данные C#, Visual Basic и JScript .NET являются управляемыми по умолчанию. Данные C# также могут быть помечены как неуправляемые.
Сборка (Assembly) – базовый строительный блок приложения в .NET Framework.
Декларация сборки (Manifest) – составная часть сборки. Это еще один набор таблиц метаданных, который:
Эта информация используется в период выполнения для поддержки корректной работы приложения.
Процессор НЕ МОЖЕТ выполнять IL-код. Перевод IL-кода осуществляется JIT-компилятором (Just In Time – в нужный момент), который активизируется CLR по мере необходимости и выполняется процессором. При этом результаты деятельности JIT-компилятора сохраняются в оперативной памяти. Между фрагментом оттранслированного IL-кода и соответствующим блоком памяти устанавливается соответствие, которое в дальнейшем позволяет CLR передавать управление командам процессора, записанным в этом блоке памяти, минуя повторное обращение к JIT-компилятору.
В среде CLR допускается совместная работа и взаимодействие компонентов программного обеспечения, реализованных на различных языках программирования.
На основе ранее сформированного блока метаданных CLR обеспечивает ЭФФЕКТИВНОЕ взаимодействие выполняемых .NET-приложений.
Для CLR все сборки одинаковы, независимо от того, на каких языках программирования они были написаны. Главное – это чтобы они соответствовали CLS. Фактически CLR разрушает границы языков программирования (cross-language interoperability). Таким образом, благодаря CLS и CTS, .NET-приложения оказываются приложениями на MSIL (IL).
CLR берет на себя решение многих проблем, которые традиционно находились в зоне особого внимания разработчиков приложений. К числу функций, выполняемых CLR, относятся:

Структура среды выполнения CLR (основные функциональные элементы среды) представлена на рисунке.
Строгий контроль типов, в частности, предполагает проверку соответствия типа объекта диапазону значений, которые могут быть присвоены данному объекту.
Защита .NET (безопасность) строится поверх системы защиты операционной системы компьютера. Она не дает пользователю или коду делать то, что делать не позволено, и накладывает ограничения на выполнение кода. Например, можно запретить доступ некоторым секциям кода к определенным файлам.
Функциональные блоки CLR Code Manager и
Exception Manager включает следующие компоненты:
Ниже представлена схема выполнения .NET-приложения в среде CLR.

AppDomain (домен приложения) – это логический контейнер сборок, который используется для изоляции приложения в рамках адресного пространства процесса. Код, выполняемый в CLR (CLR-процесс), отделен от других процессов, выполняемых на компьютере в это же самое время. Обычный процесс запускается системой в рамках специально выделяемого процессу адресного пространства. CLR предоставляет возможность выполнения множества управляемых приложений в ОДНОМ ПРОЦЕССЕ. Каждое управляемое приложение связывается с собственным
Свойства доменов:
GAC (Global Assembly Cache – Общий КЭШ сборок). Для выполнения .NET-приложения достаточно разместить относящиеся к данному приложению сборки в одном каталоге. Если при этом сборка может быть использована в нескольких приложениях, то она размещается и регистрируется с помощью специальной утилиты в GAC.
CTS –
Пространство имен – это способ организации системы типов в единую группу. В рамках .NET существует единая (общеязыковая) библиотека базовых классов. Концепция пространства имен обеспечивает эффективную организацию и навигацию по этой библиотеке. Вне зависимости от языка программирования, доступ к определенным классам обеспечивается за счет их группировки в рамках общих пространств имен.
| System | |
| System.Data | Классы для обращения к базам данных |
| System.Data.Common | |
| System.Data.OleDb | |
| System.Data.SqlClient | |
| System.Collections | Классы для работы с контейнерными объектами |
| System.Diagnostics | Классы для трассировки и отладки кода |
| System.Drawing | Классы графической поддержки |
| System.Drawing.Drawing2D | |
| System.Drawing.Printing | |
| System.IO | Поддержка ввода/вывода |
| System.Net | Поддержка передачи данных по сетям |
| System.Reflection | Работа с пользовательскими типами во время выполнения приложения |
| System.Reflection.Emit | |
| System.Runtime.InteropServices | Поддержка взаимодействия с "обычным кодом" – DLL, COM-серверы, удаленный доступ |
| System.Runtime.Remoting | |
| System.Security | Криптография, разрешения |
| System.Threading | Работа с потоками |
| System.Web | Работа с web-приложениями |
Выполнение неуправляемых исполняемых модулей (обычные Windows-приложения) обеспечивается непосредственно системой Windows. Неуправляемые модули выполняются в среде Windows как "простые" процессы. Процесс характеризуется замкнутым адресным пространством. При этом необходимая для выполнения программы информация (данные) размещается в различных областях адресного пространства процесса, которые называются стеком и кучей. Эти области имеют различное назначение и механизмы управления.
Информация в стеке и куче представляется в виде последовательностей битов с четко определенными свойствами. Такие последовательности называются объектами. Множество неизменяемых свойств, которые могут служить для классификации различных объектов (количество байтов последовательности, формат представления информации в последовательности, операции, определенные над объектом), задают тип объекта.
Таким образом, при выполнении программы в стеке и куче размещаются объекты различных типов.
В стеке размещается информация, необходимая для выполнения программного кода (реализация механизма вызова функций, поддержка операторов управления, сохранение значений локальных переменных). Основным механизмом управления стеком является указатель стека. Освобождение стека происходит в результате перемещения указателя стека, которое связано с выполнением операторов программы.
В куче размещаются используемые в программе данные. Они структурированы и представлены объектами различных типов. Размещение объектов в куче происходит в результате выполнения специального оператора new. Основным механизмом управления кучи является сборщик мусора (
Ссылкой (ссылкой на объект) называется объект, который определен на множестве значений, представленных адресами оперативной памяти в рамках процесса. Если значением ссылки является адрес конкретного объекта, ссылка считается определенной. Ссылка на объект не определена, если ее значение не соответствует адресу какого-либо объекта. Неопределенное значение ссылки в программе кодируется специальным обозначением (null). Особых ограничений на месторасположение ссылки не существует. Ссылка может располагаться как в стеке, так и в куче.
Сборка мусора – механизм, позволяющий CLR определить, когда объект становится недоступен в управляемой памяти программы. При сборке мусора управляемая память освобождается. Для разработчика приложения наличие механизма сборки мусора означает, что он больше не должен заботиться об освобождении памяти. Однако это может потребовать изменения в стиле программирования, например, особое внимание следует уделять процедуре освобождения системных ресурсов. Необходимо реализовать методы, освобождающие системные ресурсы, находящиеся под управлением приложения.
Имеет смысл воспринимать языки программирования высокого уровня как ОБЫЧНЫЕ ИНОСТРАННЫЕ ЯЗЫКИ.
На английском, французском, китайском и т.д. языках можно сформулировать собственные мысли таким образом, чтобы они были понятны носителю данного иностранного языка.
Языки программирования позволяют аналогичным образом "общаться" с электронными устройствами.
Программист владеет естественным языком.
Для электронного устройства "понятна" специфическая система команд.
Общение на естественном языке пока невозможно для устройств.
Общение на машинном языке неудобно для программиста.
Компромиссным решением является разработка "промежуточного" языка – языка программирования. Она ведется в соответствии с некоторыми представлениями о том, КАК можно описать что-либо на языке программирования таким образом, чтобы это описание, несмотря на специфику "слушателя" было бы максимально простым и понятным для всех участников общения. Эти представления о способах изложения мысли на языке программирования формулируются в виде системы общих принципов, которые формируют парадигму программирования.
За более чем полувековой период развития информационных технологий парадигмы менялись несколько раз. Современные языки программирования разрабатываются в соответствии с парадигмой Объектно-Ориентированного Программирования (ООП), которая основана на нижеследующих принципах.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.