C#.pptx
- Количество слайдов: 36
Основы программирования на языке C# Андриевский Леонид Владимирович
По материалам Г. Шилдт «C# 4. 0 полное руководство» Вильямс, 2011 [RU] «Руководство по программированию на C#» , Microsoft Developer Network [EN] (http: //bit. ly/5 v. Z 3 OB) Курс MCTS: . NET Framework 4, Windows [EN] Applications (70 -511)
Hello, world! using System; namespace Hello. World { class Hello { static void Main() { Console. Write. Line("Hello World!"); Console. Write. Line("Нажите любую клавишу для выхода. "); // Ожидания нажатия клавиши перед завершением приложения Console. Read. Key(); } } }
1. 2. 3. Пространства имён (namespace) Используются для создания иерархической структуры хранения описанных в. NET классов. Организация собственного пространства имён помогает контролировать область действия классов в крупных проектах: namespace My. Namespace { class A 1 { <описание класса> } <другие описания классов> } Обращение к классу пространства имен (по подному имени): My. Namespace. A 1 System. Console 3. Языковая конструкция using <пространство имен>; может отменить необходимость указания полного имени класса. 4. Для поиска класса в глобальном пространстве имен используется префикс global: : , например global: : System. Console. Write. Line("Hello World");
Объявление переменных Примеры: int x; long y = 5; bool p, q, r; double a, b = 8. 0, c, d = 9. 0, e; Определение типа переменной по типу начального значения: var x = 18;
Система типов C# С# - строго типизированный язык ◦ Каждая константа и переменная имеет тип ( как и каждое выражение, результатом вычисления которого является значение) ◦ Каждая сигнатура метода задает тип для каждого входного параметра и для возвращаемого значения. Каждый тип в CTS определен либо как тип значения (наследники типа System. Value. Type): ◦ встроенные числовые типы C#; ◦ структуры (типы, объявленные с помощью слова struct); ◦ перечисления (типы, объявленные с помощью слова enum). либо как ссылочный тип: ◦ ◦ тип object; классы (типы, объявленные с помощью слова struct); строки (string); массивы.
Система типов C#
Основные числовые типы C# System. SByte 1 От -128 до 127 byte System. Byte 1 От 0 до 255 short System. Int 16 2 От -32768 до 32767 ushort System. UInt 16 2 От 0 до 65535 int System. Int 32 4 От -231 до 231 -1 uint System. UInt 32 4 От 0 до 232 -1 long System. Int 64 8 От -263 до 263 -1 ulong Вещ. Размер Диапазон (байт) sbyte Целые Имя типа. NET C# (CTS) System. UInt 64 8 От 0 до 264 -1 float System. Single 4 От ± 1, 5 e− 45 до ± 3, 4 e 38 double System. Double 8 От ± 5, 0 e− 324 до ± 1, 7 e 308 System. Decimal 16 От -7, 9 x 1028 до 7, 9 x 1028 точность 28 -29 знач. цифр Фин. decimal
Основные типы C# Имя типа. NET (CTS) Размер (байт) Диапазон bool System. Boolean 4 false. . true char System. Char 2 U+0000 до U+FFFF (любой 16 разрядный символ Unicode) string System. String переменный От -32768 до 32767 object System. Object переменный все типы – наследники этого типа Начиная с C# 4. 0 введен тип dynamic – позволяет пропускать проверки типов во время компиляции операции, в которых он применяется (проверки типов проводятся во время выполнения программы)
Таблица неявных числовых преобразований C#
Допускающие значение null типы (Nullable)
Таблица приоритетов операторов C# Все операции в порядке убывания приоритета Symbol 1 тип операции Ассоциативность [ ] ( ). -> (постфикс)++ и (постфикс)-- Выражение Слева направо ++(префикс) и –Унарные (префикс) sizeof ~ & * ! + - Справа налево Преобразование типа Унарные Справа налево */% Мультипликативные Слева направо +– Аддитивные Слева направо << >> Битовый сдвиг Слева направо < > <= >= Отношения Слева направо == != Сравнение Слева направо
Таблица приоритетов операторов C# Symbol 1 тип операции Ассоциативность & Побитовое «И» Слева направо | Побитовое «ИЛИ» Слева направо && Логическое «И» Слева направо || Логическое «ИЛИ» Слева направо ? : Условное выражение Справа налево = *= /= %= += Оператор присваивания и - = <<= >>= сложное присваивание &= ^= |= , Справа налево последовательное выполнение Слева направо
Операторы первого приоритета
Арифметические операции
Логические и сдвиговые операции над переменными целых типов
Операции над переменными логического типа
Операции отношения и проверки типа
Операторы => и ? ?
Примеры расстановки приоритетов C# Выражение Автоматическая расстановка приоритетов a & b || c (a & b) || c a = b || c a = (b || c) q && r || s-- (q && r) || s–– Выражение Автоматическая расстановка приоритетов => ошибка p == 0 ? p += 1: p += 2 (p == 0 ? p += 1 : p) += 2
Объектно-ориентированное программирование
Перечисления (enum) Способ определения набора именованных констант enum Machine. State { Power. Off, Running, Sleeping, Hibernating } По умолчанию базовый тип перечисления = int (можно указать любой целочисленный тип). По умолчанию каждой константе присваивается порядковый номер начиная с 0 (номер любой константы можно изменить): enum Day. Type : byte { Working = 0, Holiday = 7 }
Перечисления (enum) Указание атрибута [Flags] создает перечисление с битовыми флагами, к которым можно применять битовые операции: [Flags] enum Machine. State { Power. Off = 0 x 1, Running = 0 x 2, Sleeping = 0 x 4, Hibernating = 0 x 8 } … var suspend = Machine. State. Hibernating | Machine. State. Sleeping; Также, поскольку все перечисления - наследники класса System. Enum, можно использовать его статические методы для получения информации о перечислении: foreach (int i in Enum. Get. Values(typeof(Machine. State))) Console. Write. Line(i);
Методы (method)
Свойства (property)
Делегаты (delegate) Это тип, который определяет сигнатуру метода. При создании экземпляра делегата можно связать этот экземпляр с любым методом с совместимой сигнатурой. Связанный с делегатом метод можно запустить (или вызвать) с помощью экземпляра делегата. // Объявление делегата public delegate void Del(string message); // Метод, который в дальнейшем будет связан с делегатом public static void Delegate. Method(string message) { System. Console. Write. Line(message); } // Создание делегата и связывание его с методом (Delegate. Method) Del handler = Delegate. Method; // Вызов связанного с делегатом метода (Delegate. Method) handler("Hello World");
Делегаты (delegate) Также делегат может быть проинициализирован анонимной функцией или лямбда-выражением: Del test. Del. B = delegate(string s) { Console. Write. Line(s); }; Del test. Del. C = (x) => { Console. Write. Line(x); }; Делегаты можно комбинировать (несколько делегатов объединяются в один, при этом связанные методы вызываются последовательно в порядке добавления). Для комбинации доступны операции + (добавить делегаты) и – (удалить ранее добавленный делегат): var hi. Del = delegate(string s) { Console. Write("Hello {0}!", s); }; var bye. Del = delegate(string s) { Console. Write("Goodbye {0}!", s); }; multi. Del = hi. Del + bye. Del; multi. Minus. Hi. Del = multi. Del - hi. Del; hi. Del("Q"); // Выведет: Hello Q! bye. Del("U"); // Выведет: Goodbye U! multi. Del("V"); // Выведет: Hello V!Goodbye V! multi. Minus. Del("W"); // Выведет: Goodbye W!
Структуры (struct)
Интерфейсы (interface)
Классы (class)
События (event)
Исключения (Exception)
Универсальные шаблоны (Generic)
Индексаторы (Indexers)
Небезопасный код (unsafe) и указатели (pointer)
Взаимодействие с неуправяемыми программами (Interoperability)


