Реферат: Программа на C# 9 Основы языка 9





Оглавление

Введение 4

Обзор .NET. Основные понятия 4

Программа на C# 9

Основы языка 9

Пространство имён 9

Система типов 10

Класс и Структура. Первое приближение 11

Литералы. Представление значений 13

Арифметические литералы 13

Логические литералы 13

Символьные литералы 13

Символьные escape-последовательности 13

Строковые литералы 14

Операции и выражения 14

Приоритет операций 15

Приведение типов 15

Особенности выполнения арифметических операций 17

Особенности арифметики с плавающей точкой 17

Константное выражение 18

Переменные элементарных типов. Объявление и инициализация 18

Константы 19

Перечисления 19

Объявление переменных. Область видимости и время жизни 20

Управляющие операторы 22

if, if … else … 22

switch 23

while 25

do … while 25

for 26

foreach 26

goto, break, continue 27

Методы 27

Синтаксис объявления метода 27

Вызов метода 28

Перегрузка методов 28

Способы передачи параметров при вызове метода 29

Передача параметров. Ссылка и ссылка на ссылку как параметры 30

Сравнение значений ссылок 31

this в нестатическом методе 32

Свойства 32

Обработка исключений 33

Массив. Объявление 35

Инициализация массивов 37

Примеры инициализации массивов 38

Два типа массивов: Value Type and Reference Type 39

Встроенный сервис по обслуживанию простых массивов 40

Реализация сортировки в массиве стандартными методами 40

Подробнее о массивах массивов (jagged array) 45

Массивы как параметры 46

Спецификатор params 48

Main в классе. Точка входа 49

Создание объекта. Конструктор 50

Операция new 51

В управляемой памяти нет ничего, что бы создавалось без конструктора 52

Кто строит конструктор умолчания 53

this в контексте конструктора 53

Перегрузка операций 54

Синтаксис объявления операторной функции 55

Унарные операции. Пример объявления и вызова 56

Бинарные операции 57

true и false Operator 58

Определение операций конъюнкция и дизъюнкции 59

А как же || и && 59

И вот результат… 60

Пример. Свойства и индексаторы 63

explicit и implicit. Преобразования явные и неявные 66

Наследование 67

Наследование и проблемы доступа 68

Явное обращение к конструктору базового класса 69

Кто строит БАЗОВЫЙ ЭЛЕМЕНТ 70

Переопределение членов базового класса 71

Наследование и new модификатор 73

Полное квалифицированное имя. Примеры использования 73

Прекращение наследования. sealed спецификатор 74

Абстрактные функции и абстрактные классы 75

Ссылка на объект базового класса 77

Операции is и as 79

Виртуальные функции. Принцип полиморфизма 81

Интерфейсы 83

Делегаты 88

События 93

События и делегаты. Различия 97

Атрибуты, сборки, рефлексия 99

Рефлексия (отражение) типов 99

Реализация отражения. Type, InvokeMember, BindingFlags 101

Атрибуты 105

Сборка. Класс Assembly 109

Класс сборки в действии 111

Разбор полётов 114

Класс System.Activator 114

Версия сборки 115

Файл конфигурации приложения 116

Общедоступная сборка 116

Игры со сборками из GAC 117

Динамические сборки 118

Динамическая сборка: создание, сохранение, загрузка, выполнение 120

Ввод-вывод 123

Базовые операции 123

Потоки: байтовые, символьные, двоичные 123

Предопределённые потоки ввода-вывода 125

Функция ToString() 126

Консольный ввод-вывод. Функции-члены класса Console 127

Консольный вывод. Форматирование 129

Функции вывода. Нестандартное (custom) форматирование значений. 130

Консольный ввод. Преобразование значений 133

Файловый ввод-вывод 134

Потоки 137

Процесс, поток, домен 137

Домен приложения 137

Обзор пространства имён System.Threading 139

Многопоточность 139

Виды многопоточности 140

А кто в домене живёт… 140

Класс Thread. Общая характеристика 141

Именование потока 141

Игры с потоками 142

Характеристики точки входа дополнительного потока 143

Запуск вторичных потоков 143

Приостановка выполнения потока 144

Отстранение потока от выполнения 145

Завершение потоков 146

Метод Join() 148

Состояния потока (перечисление ThreadState) 148

Одновременное пребывание потока в различных состояниях 150

Фоновый поток 150

Приоритет потока 151

Передача данных во вторичный поток 152

Извлечение значений (данных) с помощью Callback методов 153

Организация взаимодействия потоков 154

1. Посредством общедоступных (public) данных 154

2. Посредством общедоступных (public) свойств 156

3. Посредством общедоступных очередей 159

Состязание потоков 162

Блокировки и тупики 162

Очереди. Основа интерфейса взаимодействия 167

Безопасность данных и критические секции кода 167

Пример организации многопоточного приложения 168

Очередь как объект синхронизации 169

Синхронизация работы потоков при работе с общими ресурсами 170

1. Организация критических секций 170

2. Специальные возможности мониторов 174

Рекомендации по недопущению блокировок потоков 177

Форма 178

Класс Form 178

Форма: управление и события жизненного цикла 180

Форма: контейнер как элемент управления 180

Разница между элементами управления и компонентами. 181

Свойства элементов управления. Anchor и Dock 181

Extender providers. Провайдеры дополнительных свойств 181

Validating и Validated элементов управления 184

Управление посредством сообщений 186

Стандартный делегат 187

Делегат EventHandler 187

Класс Application 189

События класса Application 191

Windows message 191

Примеры перехвата сообщений 192

Метод WndProc 194

Пример переопределения WndProc 194

Контекст приложения 195

Общие сведения о GDI+ 198

GraphicsPath 199

Region 201

Применение классов GraphicsPath и Region. Круглая форма 202

Собственные элементы управления 204

Литература 213


^ Введение Обзор .NET. Основные понятия
ПЛАТФОРМА - это как минимум среда выполнения программ и… ещё что-либо, что определяет особенности разработки и выполнения программного кода – парадигмы программирования, языки программирования, множества базовых классов.

Microsoft.NET (.NET Framework) – программная платформа. Содержит следующие основные компоненты: the common language runtime (CLR) and the .NET Framework class library (.NET FCL).

CLS (Common Language Specification) – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компиляторов в среде .NET Framework. Библиотеки, построенные в соответствии с CLS, могут быть использованы из любого языка программирования, поддерживающего CLS. Языки, соответствующие CLS (к их числу относятся языки Visual C#, Visual Basic, Visual C++), могут интегрироваться друг с другом. CLS – это основа межъязыкового взаимодействия в рамках платформы Microsoft.NET.

CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина. Обеспечивает выполнение сборки. Основной компонент .NET Framework. Под Виртуальной Машиной понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение программного кода и предполагает решение следующих задач:

управление кодом (загрузку и выполнение),

управление памятью при размещении объектов,

изоляцию памяти приложений,

проверку безопасности кода,

преобразование промежуточного языка в машинный код,

доступ к метаданным (расширенная информация о типах),

обработка исключений, включая межъязыковые исключения,

взаимодействие между управляемым и неуправляемым кодом (в том числе и COM-объектами),

поддержка сервисов для разработки (профилирование, отладка и т.д.).


Короче, CLR – это набор служб, необходимых для выполнения сборки. При этом программный код сборки может быть как управляемым (код, при выполнении которого CLR, в частности, активизирует систему управления памяти), так и неуправляемым (“старый” программный код).

Сама CLR состоит из двух главных компонентов: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll). Наличие этих файлов на диске – верный признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы .NET.

Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в неё встраивается специальная информация, которая при запуске приложения (EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство процесса, ядро среды выполнения выполняет следующие действия:

находит местонахождение сборки,

загружает сборку в память,

производит анализ содержимого сборки (выявляет классы, структуры, интерфейсы),

производит анализ метаданных,

обеспечивает компиляцию кода на промежуточном языке (IL) в платформозависимые инструкции (ассемблерный код),

выполняет проверки, связанные с обеспечением безопасности,

используя основной поток приложения, передаёт управление преобразованному в команды процессора фрагменту кода сборки.



FCL (.NET Framework Class Library) – соответствующая CLS спецификации объектно-ориентированная библиотека классов, интерфейсов и системы типов (типов-значений), которые включаются в состав платформы Microsoft .NET.

Эта библиотека обеспечивает доступ к функциональным возможностям системы и предназначена в качестве основы при разработке .NET приложений, компонент, элементов управления.

.NET библиотека классов является вторым компонентом CLR.

.NET FCL могут использовать ВСЕ .NET-приложения, независимо от назначения, архитектуры, используемого при разработке языка программирования. В частности, содержит:

встроенные (элементарные) типы, представленные в виде классов (на платформе .NET всё построено на структурах или классах),

классы для разработки графического пользовательского интерфейса (Windows Form),

классы для разработки Web-приложений и Web-служб на основе технологии ASP.NET (Web Forms),

классы для разработки XML и Internet-протоколами (FTP, HTTP, SMTP, SOAP),

классы для разработки приложений, работающих с базами данных (ADO.NET),

и многое другое.


.NET-приложение – приложение, разработанное для выполнения на платформе Microsoft.NET. Реализуется на языках программирования, соответствующих CLS.

MSIL (Microsoft Intermediate Language, он же IL – Intermedia Language) – промежуточный язык платформы Microsoft.NET. Исходные тексты программ для .NET приложений пишутся на языках программирования, соответствующих спецификации CLS. Для языков программирования, соответствующих спецификации CLS может быть построен преобразователь в MSIL. Таким образом, программы на этих языках могут транслироваться в промежуточный код на MSIL. Благодаря соответствию CLS, в результате трансляции программного кода, написанного на разных языках, получается совместимый IL код.

Фактически MSIL является ассемблером виртуального процессора.

МЕТАДАННЫЕ - при преобразовании программного кода в MSIL также формируется блок МЕТАДАННЫХ, содержащий информацию о данных, используемых в программе. Фактически это наборы таблиц, содержащих информацию о типах данных, определяемых в модуле, о типах данных, на которые ссылается данный модуль. Ранее такая информация сохранялась отдельно. Например, приложение могло включать информацию об интерфейсах, которая описывалась на Interface Definition Language (IDL). Теперь метаданные являются частью управляемого модуля.

В частности, метаданные используются для:

сохранения информации о типах. При компиляции теперь не требуются заголовочные и библиотечные файлы. Всю необходимую информацию компилятор читает непосредственно из управляемых модулей,

верификации кода в процессе выполнения модуля,

управления динамической памятью (освобождение памяти) в процессе выполнения модуля,

при разработке программы стандартными инструментальными средствами (Microsoft Visual Studio.NET)

на основе метаданных обеспечивается динамическая подсказка (IntelliSense).



Языки, для которых реализован перевод на MSIL:

Visual Basic,

Visual C++,

Visual C#,

и ещё много других языков.


Исполняемый модуль - независимо от компилятора (и входного языка) результатом трансляции .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. Управляемые модули объединяются в сборки. Сборка является логической группировкой одного или нескольких управляемых модулей или файлов ресурсов. Управляемые модули в составе сборок исполняются в Среде Времени Выполнения (CLR). Сборка может быть либо исполняемым приложением (при этом она размещается в файле с расширением .EXE), либо библиотечным модулем (в файле с расширением .DLL). При этом ничего общего с обычными (старого образца!) исполняемыми приложениями и библиотечными модулями сборка не имеет.

Декларация сборки (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, относятся:

проверка и динамическая (JIT) компиляция MSIL кода в команды процессора,

управление памятью, процессами и потоками,

организация взаимодействия процессов,

решение проблем безопасности (в рамках существующей в системе политики безопасности).


AppDomain (домен приложения) - это логический контейнер сборок, который используется для изоляции приложения в рамках адресного пространства процесса. Все объекты, создаваемые приложением, создаются в рамках определенного домена приложения. Несколько доменов приложений могут существовать в одном процессе операционной системы. CLR изолирует приложения, управляя памятью в рамках домена приложения.

Код, выполняемый в CLR (CLR процесс) отделён от других процессов, выполняемых на компьютере в это же самое время.

Обычный процесс запускается системой в рамках специально выделяемого процессу адресного пространства. CLR предоставляет возможность выполнения множества управляемых приложений в ОДНОМ ПРОЦЕССЕ. Каждое управляемое приложение связывается с собственным доменом приложения (сокращенно AppDomain). В приложении помимо основного домена может быть создано несколько дополнительных доменов.

Структура среды выполнения CLR представлена на картинке.





Свойства доменов:

домены изолированы друг от друга. Объекты, созданные в рамках одного домена недоступны из другого домена,

CLR способна выгружать домены вместе со всеми сборками, связанными с этими доменами,

возможна дополнительная конфигурация и защита доменов,

для обмена данными между доменами реализован специальный механизм безопасного доступа (маршалинг).

В .NET Framework разработана собственная компонентная модель, элементами которой являются .NET-сборки (.NET-assembly), а для прямой и обратной совместимости с моделью COM/COM+ в CLR встроены механизмы (COM Interop), обеспечивающие доступ к COM-объектам по правилам .NET и к .NET-сборкам по правилам COM. При этом для .NET-приложений не требуется регистрации компонентов в системном реестре Windows.

Для выполнения .NET-приложения достаточно разместить относящиеся к данному приложению сборки в одном каталоге. Если при этом сборка может быть использована в нескольких приложениях, то она размещается и регистрируется с помощью специальной утилиты в GAC (Global Assembly Cache Общем КЭШе сборок).

CTS - Common Type System Стандартная Система Типов. Поддерживается всеми языками платформы. В силу того, что .NET дитя ООП – то речь здесь идёт об элементарных типах, классах, структурах, интерфейсах, делегатах и перечислениях.

Common Type System является важной частью среды выполнения, определяет структуру синтаксических конструкций, способы объявления, использования, и применения ОБЩИХ типов среды выполнения. В CTS сосредоточена основная информация о системе ОБЩИХ ПРЕДОПРЕДЕЛЁННЫХ типов, об их использовании и управлении (правилах преобразования значений). CTS играет важную роль в деле интеграции разноязыких управляемых приложений.

Пространство имён – это способ организации системы типов в единую группу. Существует общая общеязыковая библиотека базовых классов. И концепция пространства имён обеспечивает эффективную организацию и навигацию в этой библиотеке. Вне зависимости от языка программирования доступ к определённым классам обеспечивается за счёт их группировки в рамках общих пространств имён.


Пространство имён

Назначение

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-приложениями

System.Windows.Form

Работа с элементами интерфейса Windows

System.XML

Поддержка данных в формате XML


Выполнение неуправляемых исполняемых модулей (обычные Windows приложения), обеспечивается непосредственно системой Windows. Неуправляемые модули выполняются в среде Windows как “простые” процессы. Единственное требование, которому должны отвечать подобные модули – корректная работа в среде Windows. Они должны “правильно” работать (не вешать систему, не допускать утечек памяти, не блокировать другие процессы и корректно использовать средства самой ОС для работы от имени процессов). То есть, соответствовать наиболее общим правилам работы под Windows.

При этом большинство проблем корректного выполнения неуправляемого модуля (проблемы взаимодействия, выделения и освобождения памяти) являются проблемами разработчиков приложений. Например, известная технология COM является способом организации взаимодействия разнородных компонентов в рамках приложения.

Объект – в широком смысле это область памяти (стеке или куче), выделяемая в процессе выполнения программы для записи каких-либо значений. Характеризуется типом (фиксированным набором свойств, определяющих размер занимаемой области, способ интерпретации значения, диапазон значений, множество действий, допустимых при манипуляциях с объектом) местом расположения в памяти (адресом).

Сборка мусора - механизм, позволяющий CLR определить, когда объект становится недоступен в управляемой памяти программы. При сборке мусора управляемая память освобождается. Для разработчика приложения наличие механизма сборки мусора означает, что он больше не должен заботиться об освобождении памяти. Однако это может потребовать изменения в стиле программирования, например, особое внимание следует уделять процедуре освобождения системных ресурсов. Необходимо реализовать методы, освобождающие системные ресурсы, находящиеся под управлением приложения.

Стек - специальным образом организованная область памяти, предназначенный для временного хранения значений объектов (переменных и констант), для передачи параметров при вызове методов, для сохранения адреса возврата. Управление стеком по сравнению с кучей достаточно просто. Оно основано на изменении значения соответствующего регистра вершины стека. При сокращении размера стека объекты просто теряются.
^ Программа на C#
Программа – правильно построенная (не вызывающая возражений со стороны C# компилятора) последовательность предложений, на основе которой формируется сборка.

В общем случае, программист создаёт файл, содержащий объявления класов, который подаётся на вход компилятору. Результат компиляции представляется транслятором в виде сборки и определяется предпочтениями программиста. В принципе сборка может быть двух видов:

Portable Executable File (PE-файл с расширением .exe), пригоден к непосредственному исполнению CLR,

Dynamic Link Library File (DLL-файл с расширением .dll), предназначен для повторного использования как компонент в составе какого-либо приложения.

В любом случае на основе входного кода транслятор строит модуль на IL, манифест, и формирует сборку. В дальнейшем, сборка либо может быть выполнена после JIT компиляции, либо может быть использована в составе других программ.


^ Основы языка Пространство имён
.NET Framework располагает большим набором полезных функций. Каждая из них является членом какого-либо класса. Классы группируются по пространствам имён, которые имеют (как правило) вложенную структуру.

Средством навигации по множествам классов в пространствах имён является оператор

usung <ИмяПространстваИмён>;

В приложении объявляется собственное пространство имён и используются ранее объявленные пространства.

В процессе построения сборки Visual Studio.NET должен знать расположение сборок с заявленными для использования пространствами имён. Расположение части сборок системе известно изначально. Расположение прочих требуемых приложению сборок указывается явно (окно Solution Explorer проекта, пункт References, Add Reference…). Там надо указать соответствующий .dll или .exe файл.

В частности, сборка, содержащая классы, сгруппированные в пространстве имён System, располагается в файле mscorlib.dll.

Наиболее часто используемое пространство имён – System. Расположение соответствующей сборки известно. Если не использовать оператора

usung System;

корректное обращение к функции WriteLine(…) члену класса Console выглядело бы следующим образом:


System.Console.Writeline(“Ha-Ha-Ha!”); // Полное квалифицированное

//имя функции-члена класса Console, отвечающей за вывод строки в окно приложения.


При компиляции модуля, транслятор по полному имени функции (если используется оператор using – то по восстановленному) находит её код, который и используется при выполнении сборки.
^ Система типов
Система типов поддерживает две категории типов, каждая из которых разделена на подкатегории: типы значений (типы-значения) и ссылочные типы (типы-ссылки).

Схема типов представлена ниже.





Все типы, за исключением простых типов, могут определяться программистом. Все остальные типы (производные типы) требуют предварительного объявления.

Простые (элементарные) типы – это типы, имя и основные свойства которых известны компилятору. Относительно встроенных типов компилятору не требуется никакой дополнительной информации. Он поддерживает эти типы самостоятельно.

Среди простых типов различаются:

ЦЕЛОЧИСЛЕННЫЕ,

^ С ПЛАВАЮЩЕЙ ТОЧКОЙ,

DECIMAL,

БУЛЕВСКИЙ.


Для обозначения простых (элементарных) типов в C# используется следующая система обозначений. Некоторые характеристики типов отражены в следующей таблице. Смысл точечной нотации в графе “Соответствует FCL-типу” будет разъяснён позже. Пока эту нотацию достаточно воспринимать как составное имя:


Имя типа в C#

Соответствует FCL-типу

Описание

sbyte

System.SByte

Целый. 8-разрядное со знаком. Диапазон значений: 128 … 127

byte

System.Byte

Целый. 8-разрядное без знака. Диапазон значений: 0 … 255

short

System.Int16

Целый. 16-разрядное со знаком. Диапазон значений: -32768 … 32767

ushort

System.UInt16

Целый. 16-разрядное без знака. Диапазон значений: 0 … 65535

int

System.Int32

Целый. 32-разрядное со знаком. Диапазон значений: -2147483648 … 2147483647

uint

System.UInt32

Целый. 32-разрядное без знака. Диапазон значений: -0 … 4294967295

long

System.Int64

Целый. 64-разрядное со знаком. Диапазон значений: -9223372036854775808 … 9223372036854775807

ulong

System.UInt64

Целый. 64-разрядное без знака. Диапазон значений: 0 … 18446744073709551615

char

System.Char

16 (!) разрядный символ UNICODE.

float

System.Single

Плавающий. 32 разряда. Стандарт IEEE.

double

System.Double

Плавающий. 64 разряда. Стандарт IEEE.

decimal

System.Decimal

128-разрядное значение повышенной точности с плавающей точкой.

bool

System.Boolean

Значение true или false.


При создании объекта элементарного типа производится его начальная инициализация предопределённым значением. И за это отвечают предопределённые недоступные для модификации конструкторы.


В C# различаются ВСТРОЕННЫЕ (элементарные - primitive, предопределённые – predefined) и ПРОИЗВОДНЫЕ типы.

Встроенные типы – это типы, имя и основные свойства которых известны компилятору. Производные типы требуют предварительного объявления. Относительно встроенных типов компилятору не требуется никакой дополнительной информации. Он поддерживает эти типы самостоятельно.

В разных CLS-языках типам, удовлетворяющим CLS спецификации, будут соответствовать одни и те же элементарные типы. Согласованная поддержка типов, НЕ соответствующих CLS спецификации, в разных языках не гарантируется.

Система встроенных типов C# основывается на системе типов .NET Framework Class Library. При создании IL кода компилятор осуществляет их отображение в типы из .NET FCL.

Ниже представлены основные отличия ссылочных типов и типов-значений.





Типы-значения

Типы-ссылки

Объект содержит

значение

ссылку

Располагается

в стеке

в динамической памяти

Значение по умолчанию

0, false, ‘\0’

null

При присваивании копируется

значение

ссылка


В C# объявление любой структуры и класса основывается на объявлении предопределённого класса Object (наследует класс Object). Следствием этого является возможность вызова от имени объектов-представителей любой структуры или класса унаследованных от класса Object методов. В частности, метода ToString. Этот метод возвращает строковое (значение типа string) представление объекта.

В C# также существует ещё одно важное ограничение на использование объектов размерных типов. Необходимым условием применения этих объектов является их ЯВНАЯ инициализация.
^ Класс и Структура. Первое приближение
Эти категории типов-ссылок и типов-значений заслуживают первоочередного внимания. Классы и структуры являются программно-определяемыми типами, которые позволяют определять (создавать) новые типы, специально приспособленные для решения конкретных задач. В рамках объявления класса и структуры описывается множество переменных различных типов (набор данных-членов класса), правила порождения объектов-представителей структур и классов, их основные свойства и методы, применение которых обеспечивает решение задачи.

В программе класс объявляется с помощью специальной синтаксической конструкции, которая называется объявлением класса. Фактически, объявление структур и классов является основным элементом любой C# программы. В программе нет ничего, кроме их объявлений и конструкций, облегчающих процедуру этого объявления.

С точки зрения синтаксиса, между объявлениями классов и структур существует незначительные различия (ключевое слово struct и class, в структуре не допускается объявлений членов класса со спецификаторами доступа protected, protected internal, особенности объявления конструкторов – не допускается объявления конструктора без параметров), часть из которых будет обсуждаться далее.

В этом разделе обсуждаются основные правила объявления классов.

Объявление класса состоит из нескольких элементов:

объявление атрибутов - необязательный элемент объявления,

модификаторы прав доступа - необязательный элемент объявления,

class (struct для структуры),

имя класса,

имена предков (класса и интерфейсов) - необязательный элемент объявления,

тело класса (структуры).


Атрибуты – являются средство добавления ДЕКЛАРАТИВНОЙ (вспомогательной) информации к элементам программного кода. Назначение атрибутов: организация взаимодействия между программными модулями, дополнительная информация об условиях выполнения кода, управление сериализацией (правила сохранения информации), отладка, многое другое.

Модификаторы прав доступа – средство реализации принципа инкапсуляции, используются при объявлении классов, структур и их составляющих компонентов. Представлены следующими значениями:


Public

обозначение для общедоступных членов класса. К ним можно обратиться из любого метода любого класса программы.

Protected

обозначение для членов класса, доступных в рамках объявляемого класса и из методов производных классов.

Internal

обозначение для членов класса, доступных из методов классов, объявляемых в рамках сборки, содержащей объявление данного класса.

protected internal

обозначение для членов класса, доступных в рамках объявляемого класса и из методов производных классов, а также доступных из методов классов, объявляемых в рамках сборки, содержащей объявление данного класса.

Private

обозначение для членов класса, доступных в рамках объявляемого класса.


Сочетание ключевого слова class и имя объявляемого класса задаёт имя объявляемого типа как класса (struct ИМЯ задаёт имя структуры).

конструкции

:имя класса

:список имён интерфейсов

:имя класса, список имён интерфейсов

с обязательным разделителем ‘:’ обеспечивают реализацию принципа наследования и будут обсуждаться позже.

Тело класса в объявлении ограничивается парой разделителей ‘{‘, ‘}’, между которыми располагаются объявления данных-членов и методов класса.

Следующий пример является демонстрирует использование основных элементов объявления структуры. При объявлении класса допускается лишь один спецификатор – public (здесь он опущен). Отсутствие спецификаторов доступа в объявлениях членов структуры (класса) эквивалентно явному указанию спецификаторов private.


// Указание на используемые пространства имён.

using System;

using System.Drawing;


namespace qwe // Объявление собственного пространства имён. Начало.

{

// Начало объявления структуры

struct S1

{// Тело структуры - НАЧАЛО

// Объявление данных-членов.

private Point p;

// protected int qwe; // Спецификатор protected в объявлении членов

// структуры недопустим.


// Структура не может иметь конструктора без параметров.

public S1(int x, int y)

{

p = new Point(10,10);

}


// Объявление методов.

// Статический метод. Точка входа.

static void Main(string[] args)

{

// Тело метода. Здесь обычно располагается программный код,

// определяющий функциональность класса.

}

}// Тело структуры - КОНЕЦ

} // Объявление собственного пространства имён. Конец.


^ Литералы. Представление значений
В программах на языках высокого уровня (C# в том числе) литералами называют последовательности входящих в алфавит языка программирования символов, обеспечивающих явное представление значений, которые используются для обозначения начальных значений в объявлении членов классов, переменных и констант в методах класса.

Различаются литералы арифметические (разных типов), логические, символьные (включая Escape-последовательности), строковые.
^ Арифметические литералы
Арифметические литералы кодируют значения различных (арифметических) типов. Тип арифметического литерала определяется следующими интуитивно понятными внешними признаками:

стандартным внешним видом. Значение целочисленного типа обычно кодируется интуитивно понятной последовательностью символов ‘1’,…, ‘9’, ‘0’. Значение плавающего типа также предполагает стандартный вид (точка-разделитель между целой и дробной частью, либо научная или экспоненциальная нотация – 1.2500E+052). Шестнадцатеричное представление целочисленного значения кодируется шестнадцатеричным литералом, состоящим из символов ‘0’,…,‘9’, а также ‘a’,…, ‘f’, либо ‘A’,…,‘F’ с префиксом ‘0x’,

собственно значением. 32768 никак не может быть типа short,

дополнительным префиксом. Префиксы l,L соответствуют типу long, ul,UL – unsigned long, f,F – float, d,D – decimal. Значения типа double кодируются без префикса.
^ Логические литералы
К логическим литералам относятся следующие последовательности символов: true и false. Больше логических литералов
еще рефераты
Еще работы по разное