- •Введение
- •Основные сведения по языку c#
- •Общие сведения о .Net Framework
- •C# и платформа .Net Framework
- •Средства разработки для .Net Framework
- •СредаClr
- •Понятие сборки (assembly)
- •Jit-компиляция
- •Просмотр метаданных
- •Сборка мусора
- •Обзор иср
- •Иср Visual c# Express
- •Стартовая страница
- •Консольное приложение
- •Приложения Windows
- •ИсрVisual Studio .Net
- •ИсрSharpDevelop
- •Основы языка c#
- •Алфавит
- •Комментарии
- •Идентификаторы
- •Ключевые слова
- •Переменные и константы
- •Структура программы на c#
- •Пространства имен
- •Main() и аргументы командной строки
- •Операторы
- •Основные операторы
- •Унарные операторы
- •Аддитивные операторы
- •Мультипликативные операторы
- •Операторы сдвига
- •Операторы отношений
- •Операторы присваивания
- •Арифметическое переполнение
- •Математические операции
- •Литералы
- •Описание
- •Структуры
- •Инкапсуляция
- •Наследование
- •Полиморфиэм
- •Конструкторы
- •Деструкторы
- •Интерфейсы
- •Делегаты
- •Типы значений
- •Ссылочные типы
- •Тип dynamic
- •Тип object
- •Тип string
- •Встроенные базовые типы
- •Типы чисел
- •Типы целых чисел
- •Типы чисел с плавающей запятой
- •Значения типов по умолчанию
- •Преобразования типов
- •Стандартное форматирование чисел
- •Нестандартное форматирование чисел
- •Тип char - символы
- •Тип enum - перечисление
- •Тип DateTime
- •Свойства
- •Задание типов в объявлениях переменных
- •Инструкции, введение
- •Выражения
- •Разделители
- •Решения и ветвления
- •Безусловный переход вызовом функций
- •Ветвление if; else
- •Вложенные ветвления if; else
- •Выбор switch; case
- •Команда goto и метки
- •Цикл for
- •Цикл while
- •Цикл do- while
- •Безусловные переходы
- •Вечные циклы
- •Команда foreach
- •Обработкаошибок и исключений
- •Try, Catch
- •Try, Catch, Finally
- •Работа со строками
- •Представление строк
- •Метод ToString()
- •Доступ к отдельным знакам
- •Массивы и коллекции
- •Коллекции
- •Массивы
- •Использование инструкции foreach, in
- •Графика
- •Объект Graphics
- •Перо (Pen)
- •Кисть (Brush)
- •Шрифты и текст
- •Методы рисования
- •Методы заливки
- •Рисование графика функции
- •Растровая графика
- •Примитивные компоненты
- •Подробнее оCil
- •Ассемблер cil
- •Архитектура виртуальной машиныCil
- •Память для метода
- •Система типовCts
- •Типы в базовых классах .Net, c# и cil
- •Пользовательские типы данных
- •Упакованные типы-значения
- •Виртуальная система выполнения
- •Стек вычислений
- •Автоматическое управление памятью
- •Лексемы в cil
- •Директивы cil
- •Атрибуты cil
- •Коды операций в cil
- •Команды загрузки
- •Команды выгрузки
- •Вычислительные команды
- •Арифметические инструкции
- •Переходы и вызовы в il
- •Трансляция вCil
Архитектура виртуальной машиныCil
Основные черты архитектуры виртуальной машины CIL таковы:
Машина является объектно-ориентированной: структура CIL отражает разбиение кода на классы, методы и т.п.
Машина является стековой. Стек используется только для хранения промежуточных результатов вычисления.
Ячейки стека представлены как 4-байтовые или 8-байтовые знаковые целые (обозначаемые как I4 и I8);
Большинство команд CIL получают свои аргументы на стеке, удаляют их со стека и помещают вместо них результаты вычисления.
Память для метода
При возбуждении метода память выделяется для:
Таблиц аргументов метода.
Локальных переменных метода.
Стека, в котором происходят вычисления. Для вычислений не используются регистры процессора, так как на уровне кода CIL аппаратная платформа не определена.
Полей, к которым метод может иметь доступ. Они размещены в динамической памяти - «куче».
Все поля описываются начальным адресом и типами данных, которые в них размещаются.
Стек вычисленийсостоит изслотов, которые в разные моменты времени может содержать данные разных типов. Максимальное число слотов фиксировано (по умолчанию 8).
Область локальных данныхявляется составной частью состояния метода и используется для размещения объектов, тип и/или размер которых неизвестен на этапе компиляции, но которые по тем или иным причинам нежелательно размещать в куче. Область существует ровно столько, сколько исполняется метод, состоянию которого она принадлежит. После прекращения работы метода она автоматически освобождается.
Для хранения локальных переменных и аргументов метода используются два массива, которые, как и стек вычислений, состоят из слотов. При этом каждой переменной и каждому аргументу соответствует один слот. Для доступа к локальным переменным и аргументам используются их индексы в массивах. При этом нумерация осуществляется с нуля.
Компилятор, генерирующий CIL-код, не должен делать никаких предположений о том, как переменные и параметры размещены в памяти. Дело в том, что реализации CLIмогут любым образом переупорядочивать переменные и параметры, могут произвольно выравнивать их
Система типовCts
В библиотеке классов использована общая система типов CTS(Common Types System), которая определяет доступные типы для использования во время выполнения. На следующей схеме показана связь различных типов.
Все типы делятся на две категориис
Типы-значения (value types). Представляют собой примитивные типы данных (целые числа и числа с плавающей запятой). Использование типов-значений всегда связано с копированием их значений.
Ссылочные типы (reference types). Описывают объектные ссылки (object references), которые представляют собой адреса объектов. Работа со ссылочными типами всегда осуществляется через адреса их значений.
Значения любого типа хранятся в ячейках (location). В качестве ячеек могут выступать локальные и глобальные переменные, параметры методов, поля объектов и элементы массивов. Для каждой ячейки известен тип значений, которые она может содержать.
Особо важным является то обстоятельство, что ячейки не могут содержать объекты. Все объекты размещаются в специальной области памяти, называемой кучей (heap). Таким образом, в ячейках могут храниться только значения типов-значений или объектные ссылки.