Скачать презентацию Введение в C План занятия Скачать презентацию Введение в C План занятия

Введение в си шарп Лек1.ppt

  • Количество слайдов: 51

Введение в C# Введение в C#

План занятия • • Отличие C# от С++ Типы данных Базовые выражения и операторы План занятия • • Отличие C# от С++ Типы данных Базовые выражения и операторы Программа Hello, C# world • Консольное приложение • Windows приложение • Исключения Курс SE MSF. NET Введение в C# 2

Новый язык от Microsoft, Intel, HP • Язык на котором написана платформа. NET Framework Новый язык от Microsoft, Intel, HP • Язык на котором написана платформа. NET Framework • Результат эволюции языков программирования • С# - “на пол тона выше” С++ А впрочем, можете программировать на Java ☺ Курс SE MSF. NET Введение в C# 3

Некоторые отличия C# от C++ • В С# отсутствует множественное наследование (компенсируется мн. насл. Некоторые отличия C# от C++ • В С# отсутствует множественное наследование (компенсируется мн. насл. интерфейсов) • Переменные любого типа (даже bool и int) являются объектами • Для освобождения памяти используется система сборки мусора среды выполнения • Невозможно определить глобальные переменные или методы, их определения должны находиться внутри классов Курс SE MSF. NET Введение в C# 4

Некоторые отличия C# от C++ • Все данные делятся на ссылочные и размерные • Некоторые отличия C# от C++ • Все данные делятся на ссылочные и размерные • Ссылочные хранятся в общем пуле памяти, а размерные могут храниться в стеке метода • Данные типа bool могут принимать только два значения true и false, при этом не допускается преобразование этого типа в другие • Разрядность каждого типа данных не зависит от ОС и процессора Курс SE MSF. NET Введение в C# 5

Основные отличия C# от C++ • Использование указателей ограничено областями небезопасного кода. Вместо указателей Основные отличия C# от C++ • Использование указателей ограничено областями небезопасного кода. Вместо указателей на функции используется механизм специальных методов – делегатов • В С# структуры являются размерными типами данных, а классы – ссылочными • Добавлены новые операторы и ключевые слова is, as, ref, out, foreach. В операторе try-catch добавлен блок finally Курс SE MSF. NET Введение в C# 6

Типы данных в C# Курс SE MSF. NET Введение в C# 7 Типы данных в C# Курс SE MSF. NET Введение в C# 7

Целые типы Название типа Диапазон значений Размер sbyte -128. . 127 Знаковое 8 -битное Целые типы Название типа Диапазон значений Размер sbyte -128. . 127 Знаковое 8 -битное целое byte 0. . 255 Беззнаковое 8 -битное целое char U+0000. . U+FFFF 16 -битный Unicode-символ short -32. 768. . 32. 767 Знаковое 16 -битное целое ushort 0. . 65535 Беззнаковое 16 -битное целое int -2. 147. 483. 648. . 2. 147. 483. 647 Знаковое 32 -битное целое uint 0. . 4. 294. 967. 295 Беззнаковое 32 -битное целое long -9. 223. 372. 036. 854. 775. 808. . 9. 223. 372. 036. 854. 775. 807 Знаковое 64 -битное целое ulong 0. . 18. 446. 744. 073. 709. 551. 615 Беззнаковое 64 -битное целое Курс SE MSF. NET Введение в C# 8

 • Типы с плавающей точкой Название типа Диапазон значений Float +1. 5 E-45. • Типы с плавающей точкой Название типа Диапазон значений Float +1. 5 E-45. . +3. 4 E 38 Double +5. 0 E-324. . +1. 7 E 308 Точность 7 знаков 15 -16 знаков • Тип decimal Название типа Decimal Курс SE MSF. NET Диапазон значений 1. 0 E-28 to 7. 9 E 28 Введение в C# Точность 28 -39 знаков 9

Структуры • Сходны с классами. Отличие: являются типом значения – Структура передаются по значению, Структуры • Сходны с классами. Отличие: являются типом значения – Структура передаются по значению, а не по ссылке • Объявление структуры подобно объявлению класса: public struct Point { public int x, y; public Point(int p 1, int p 2) { x = p 1; y = p 2; } } Курс SE MSF. NET Введение в C# 10

Одномерные массивы • Объявление: int[ ] arraysize=10; int[ ] array 0 = new int[arraysize]; Одномерные массивы • Объявление: int[ ] arraysize=10; int[ ] array 0 = new int[arraysize]; int[ ] array 1 = {1, 2, 3, 4, 5}; • Доступ к элементам: int element = array 1[0]; • Нумерация индексов от 0 до N - 1, N размер массива Курс SE MSF. NET Введение в C# 11

Многомерные массивы • Элементы многомерных массивов идентифицируются набором индексов Многомерные массивы • Элементы многомерных массивов идентифицируются набором индексов "координат" в многомерном пространстве • Объявление: int[, ] array = new int[10, 20, 30]; int[, ] array = {{1, 2}, {3, 4}}; • Доступ к элементам: int element = array[0, 1, 2]; Курс SE MSF. NET Введение в C# 12

Неровные (jagged) массивы Неровные массивы – это массивы массивов (ссылок на массивы) Декларация: int Неровные (jagged) массивы Неровные массивы – это массивы массивов (ссылок на массивы) Декларация: int array[ ] = new int[2]; array[0] = new int[4]; array[1] = new int[20]; Доступ: int element = array[0][1]; Размеры неровных массивов могут различаться даже в одном измерении. В приведенном примере существует элемент array[1][15], но не существует элемента array[0][15] Курс SE MSF. NET Введение в C# 13

Все значения являются объектами • Все типы значений представлены соответствующими типами. NET Framework из Все значения являются объектами • Все типы значений представлены соответствующими типами. NET Framework из пространства имен System. Они наследуются от класса Value. Type • Для каждого значения поддерживается соответствующий "упакованный" (boxed) тип, который является классом, реализующим то же поведение и содержащим те же данные • Если требуется передать значение по ссылке, оно автоматически упаковывается (box) в соответствующий упакованный тип, а по прибытии при необходимости распаковывается (unbox). Находясь в упакованном виде, тип может использовать все методы класса System. Value. Type Например, допустима следующая конструкция: string s = 2004. To. String(); Курс SE MSF. NET Введение в C# 14

Окно Matrix Class. Browser для класса Value. Type Курс SE MSF. NET Введение в Окно Matrix Class. Browser для класса Value. Type Курс SE MSF. NET Введение в C# 15

Классы наследники от Value. Type System. Object System. Value. Type • • • Курс Классы наследники от Value. Type System. Object System. Value. Type • • • Курс SE MSF. NET System. Byte System. Char System. Decimal System. Boolean System. Double System. Int 16 System. Single System. Date. Time System. Enum System. Void Введение в C# 16

Базовые выражения и операторы C# Курс SE MSF. NET Введение в C# 17 Базовые выражения и операторы C# Курс SE MSF. NET Введение в C# 17

Операторы Арифметические + / % Логические (булевые, побитовые) Катенация строк & | ^ ! Операторы Арифметические + / % Логические (булевые, побитовые) Катенация строк & | ^ ! true false + ~ && Инкремент, декремент ++ -- Сдвиг << >> Отношение == >= != > <= Курс SE MSF. NET Введение в C# - * < || 18

Операторы (продолжение) Присваивание Доступ к члену = += -= *= /= %= &= |= Операторы (продолжение) Присваивание Доступ к члену = += -= *= /= %= &= |= ^= <<= >>=. Индексация [] Условие ? : Катенация и добавление делегата + Курс SE MSF. NET Введение в C# - 19

Операторы (продолжение) Создание объекта new Информация о типе as Контроль переполнения Адресация checked Курс Операторы (продолжение) Создание объекта new Информация о типе as Контроль переполнения Адресация checked Курс SE MSF. NET * Введение в C# is -> sizeof [] typeof unchecked & 20

Математические операторы Символ Оператор + - Вычитание * Умножение / Деление % Курс SE Математические операторы Символ Оператор + - Вычитание * Умножение / Деление % Курс SE MSF. NET Сложение Остаток от целоч. деления Введение в C# 21

Унарные операторы Символ Оператор + Унарный плюс - Унарный минус ++ Инкремент -- Декремент Унарные операторы Символ Оператор + Унарный плюс - Унарный минус ++ Инкремент -- Декремент ! Унарное логическое отрицание ~ Унарная поразрядная операция дополнения (…) Преобразование типа выражения Курс SE MSF. NET Введение в C# 22

Составные операторы Символ Оператор += -= *= Сложение и присваивание /= %= &= = Составные операторы Символ Оператор += -= *= Сложение и присваивание /= %= &= = ^= <<= >>= Деление и присваивание Курс SE MSF. NET Вычитание и присваивание Умножение и присваивание Вычисление остатка от деления и присваивание Логическое ИЛИ и присваивание Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ и присваивание Сдвиг влево и присваивание Сдвиг вправо и присваивание Введение в C# 23

Поразрядные операторы Символ Оператор & Логическое либо побитовое ИЛИ ^ Логическое либо побитовое ИСКЛЮЧАЮЩЕЕ Поразрядные операторы Символ Оператор & Логическое либо побитовое ИЛИ ^ Логическое либо побитовое ИСКЛЮЧАЮЩЕЕ ИЛИ ~ Унарная поразрядная операция дополнения << Сдвиг влево >> Сдвиг вправо Курс SE MSF. NET Введение в C# 24

Логические операторы Символ Оператор && Логический оператор ИЛИ ! Унарное логическое отрицание Курс SE Логические операторы Символ Оператор && Логический оператор ИЛИ ! Унарное логическое отрицание Курс SE MSF. NET Введение в C# 25

Операторы отношения Символ Оператор == != Не равно < Меньше <= Меньше или равно Операторы отношения Символ Оператор == != Не равно < Меньше <= Меньше или равно > Больше >= Курс SE MSF. NET Равно Больше или равно Введение в C# 26

Управляющие операторы Оператор Назначение Пример if …else Оператор условного перехода if (a > b) Управляющие операторы Оператор Назначение Пример if …else Оператор условного перехода if (a > b) Console. Write. Line ("a > b"); else Console. Write. Line("a <= b"); switch Оператор ветвления switch (a) {case 1: {Console. Write. Line("A= 1"); break; } case 2: {Console. Write. Line("A= 2"); break; } default: {Console. Write. Line("A <> 0 и A <> 1"); break; }} goto Оператор безусловного перехода for Оператор цикла while Оператор цикла с предусловием Курс SE MSF. NET Exit: … goto Exit; for (int i = 0; i < 10; i++) sum += array[i]; while (x > 0) {i++; x--; } Введение в C# 27

Управляющие операторы Оператор foreach Назначение Пример Оператор цикла для работы с массивами и контейнерами Управляющие операторы Оператор foreach Назначение Пример Оператор цикла для работы с массивами и контейнерами int [ ] nums = {2, 4, 8, 16, 32}; foreach (int j in nums) {Console. Write. Line("j = {0}", j )}; do Оператор цикла с постусловием continue Выполнение цикла сначала break Прерывание выполнения цикла return string s = "A, B, C, D"; do {s=s. Substring(s. Index. Of(", ")+1); Console. Write. Line("s = {0}", s ); }} while (s. Length > 2); Возврат управления из метода Курс SE MSF. NET for (i=0; ; i++) { Console. Write. Line("{0}", i); if(i<9) continue; else break; } Введение в C# 28

Операторы AS, IS, TYPEOF as. public static void Main() { object [ ] my. Операторы AS, IS, TYPEOF as. public static void Main() { object [ ] my. Objects = new object[3]; my. Objects[0] = "hello"; my. Objects[1] = 123; my. Objects[2] = 123. 4; for (int i=0; i

Трансляция программ на C# • Визуальная среда разработки Microsoft Visual Studio. Net • Пакетный Трансляция программ на C# • Визуальная среда разработки Microsoft Visual Studio. Net • Пакетный транслятор, входящий в Microsoft. Net Framework SDK (доступен для бесплатной загрузки) • Среда Sharp. Develop (доступна для бесплатной загрузки) Курс SE MSF. NET Введение в C# 30

Программа Hello, C# world! using System; namespace Hello { class Hello. App { static Программа Hello, C# world! using System; namespace Hello { class Hello. App { static void Main() { Console. Write. Line(“Hello, C# world”); Console. Read. Line(); } } } Курс SE MSF. NET Введение в C# 31

Запуск программы Hello, C# world • • • Набираем текст программы в любом текстовом Запуск программы Hello, C# world • • • Набираем текст программы в любом текстовом редакторе Сохраняем его с именем hello. cs в директории C: Temp В командной строке набираем – • C: . . . Frameworkv 1. 1csc. exe hello. cs Запускаем сгенерированный hello. exe Наша первая программа работает! Курс SE MSF. NET Введение в C# 32

А так наша программа выглядит на MSIL. namespace 'Hello'{. class /*02000002*/ private auto ansi А так наша программа выглядит на MSIL. namespace 'Hello'{. class /*02000002*/ private auto ansi beforefieldinit 'Hello. App' extends ['mscorlib'/* 23000001 */]'System'. 'Object'/* 01000001 */ {. method /*06000001*/ private hidebysig static void 'Main'() cil managed {. entrypoint. maxstack 1 IL_0000: /* 72 | (70)000001 */ ldstr "Hello, C# world" /* 70000001 */ IL_0005: /* 28 | (0 A)00000 D */ call void ['mscorlib'/* 23000001 */]'System'. 'Console'/* 0100000 E */: : 'Write. Line'(string) /* 0 A 00000 D */ IL_000 a: /* 28 | (0 A)00000 E */ call string ['mscorlib'/* 23000001 */]'System'. 'Console'/* 0100000 E */: : 'Read. Line'() /* 0 A 00000 E */ IL_000 f: /* 26 | */ pop IL_0010: /* 2 A | */ ret } // end of method 'Hello. App': : 'Main'. method /*06000002*/ public hidebysig specialname rtspecialname instance void. ctor() cil managed { // Method begins at RVA 0 x 2070 // Code size 7 (0 x 7). maxstack 1 IL_0000: /* 02 | */ ldarg. 0 IL_0001: /* 28 | (0 A)00000 F */ call instance void ['mscorlib'/* 23000001 */]'System'. 'Object'/* 01000001 */: : . ctor() /* 0 A 00000 F */ IL_0006: /* 2 A | */ ret } // end of method 'Hello. App': : . ctor } // end of class 'Hello. App' } // end of namespace 'Hello' Курс SE MSF. NET Введение в C# 33

Работа с консолью • Для работы с консолью в. NET Framework используется класс System. Работа с консолью • Для работы с консолью в. NET Framework используется класс System. Console • Все его методы класса Console являются статическими, (не нужно создавать его экземпляр) • Класс ответственен за ввод, вывод и вывод ошибок • По умолчанию ввод/вывод производится на стандартную консоль, либо вообще не производится, если консоль отсутствует Курс SE MSF. NET Введение в C# 34

Окно Matrix Class. Browser для класса Console Курс SE MSF. NET Введение в C# Окно Matrix Class. Browser для класса Console Курс SE MSF. NET Введение в C# 35

Метод Read • Читает символ из потока ввода • Возвращает код прочитанного символа (значение Метод Read • Читает символ из потока ввода • Возвращает код прочитанного символа (значение типа int), либо -1, если ничего прочитано не было. • Пример: do { int i = Console. Read(); if (i != -1) Console. Write. Line("{0} ({1})", (char)i, i); else break; } while (true); Курс SE MSF. NET Введение в C# 36

Метод Write • Предназначен для вывода на экран • Определен для всех базовых типов Метод Write • Предназначен для вывода на экран • Определен для всех базовых типов Console. Write(1); Console. Write(3. 14159265); Console. Write("Строка"); • Поддерживает форматированные строки • При форматировании может применяться ряд модификаторов, например, вместо "{n}" подставляется n-й входной параметр Console. Write("Привет, {0}", Name); Курс SE MSF. NET Введение в C# 37

Hello C# World с помощью Sharp. Develop • • • Запускаем Sharp. Developer Создаем Hello C# World с помощью Sharp. Develop • • • Запускаем Sharp. Developer Создаем новый комбинированный проект Выбираем тип приложения - Windows. Forms Помещаем на поле формы Label Изменяем свойства Text: Hello C# World и Font: 48 • Запускаем приложение Курс SE MSF. NET Введение в C# 38

Проект в работе Курс SE MSF. NET Введение в C# 39 Проект в работе Курс SE MSF. NET Введение в C# 39

Проект в действии Курс SE MSF. NET Введение в C# 40 Проект в действии Курс SE MSF. NET Введение в C# 40

Обработка ошибок • Предположим, произошла ошибка и дальнейшее запланированное выполнение программы теряет смысл. Что Обработка ошибок • Предположим, произошла ошибка и дальнейшее запланированное выполнение программы теряет смысл. Что делать? • Можно прервать процесс и закончить работу • Можно продолжить работу, если в коде, определена стратегия поведения в “аварийной” ситуации • В старых языках программирования приходилось писать многоуровневые проверки с if, что громоздко и неудобно. . . Курс SE MSF. NET Введение в C# 41

Пример обработки ошибки деления на ноль в рамках структурного программирования using System; namespace Divide. Пример обработки ошибки деления на ноль в рамках структурного программирования using System; namespace Divide. By. Zero { class Divide. By. Zero { static void Main (string[ ] arg) { Проверка int i; for (i= -3; i<3; i++) { if (i==0) {Console. Write. Line (“Ошибка в программе – деление на ноль, i= {0} ”, i); i++; int j=1/i; Реакция на ошибку Console. Read. Line(); }}}}} Курс SE MSF. NET Введение в C# 42

Исключения • При возникновении ошибки создается объект, который ее описывает и на его основе Исключения • При возникновении ошибки создается объект, который ее описывает и на его основе выбрасывается исключение • При генерации исключения выполнение текущего кода прекращается. Идет возврат на более высокий уровень. На нем исключение может быть "поймано" и обработано • Если исключение не обрабатывается, идет переход на уровень выше и т. д. пока не дойдем либо до обработчика, либо до системного вызова, в котором все исключения обрабатываются Курс SE MSF. NET Введение в C# 43

Синтаксис исключений try { блок команд, в котором может возникнуть ошибка } [catch [(тип_исключения Синтаксис исключений try { блок команд, в котором может возникнуть ошибка } [catch [(тип_исключения имя_исключения)] { блок обработки исключения }] [finally { команды, которые выполняются в любом случае }] Курс SE MSF. NET Введение в C# 44

Пример using System; namespace Divide. By. Zero. EX { class Divide. By. Zero. EXApp Пример using System; namespace Divide. By. Zero. EX { class Divide. By. Zero. EXApp { static void Main (string[ ] arg){ int i=0; try { int j=1/i; } catch (System. Exception ex) { Ссылка на объект класса System. Exeption Console. Write. Line (“Ошибка в программе {0} [{1}]nn{2}”, ex. Source, ex. Message, ex. Stack. Trace); } Console. Read. Line(); }}} Имя программы Курс SE MSF. NET Текст сообщения Введение в C# Строка 45

Еще один пример Создаем свой class Reverse. Function { объект public static double Calculate( Еще один пример Создаем свой class Reverse. Function { объект public static double Calculate( double d ) { if (d == 0) throw new Exception ("Function is undefined in 0"); return 1 / d; } public static void Main() { try {Console. Write. Line("1 / {0} = {1}", 2, Calculate(2)); Console. Write. Line("1 / {0} = {1}", 0, Calculate(0)); Console. Write. Line("1 / {0} = {1}", 1, Calculate(1)); } catch (Exception e) { Console. Write. Line("Error: {0}", e); } } } Курс SE MSF. NET Введение в C# 46

И еще один пример • Для того, чтобы обработать нужное исключение ставится несколько блоков И еще один пример • Для того, чтобы обработать нужное исключение ставится несколько блоков catch • Вызывается первый блок, чей тип исключения соответствует типу пришедшего исключения try { Calculate. Spline(); } catch (Division. By. Zero. Exception e) { Console. Write. Line("Divizion by 0"); } catch (Overflow. Exception e) { Console. Write. Line("Overflow"); } catch (Exception e) //Обработка остальных типов { Console. Write. Line("Exception: {0}", e); } Курс SE MSF. NET Введение в C# исключений 47

Стандартные классы исключений • • System. Divide. By. Zero. Exception System. Overflow. Exception System. Стандартные классы исключений • • System. Divide. By. Zero. Exception System. Overflow. Exception System. Array. Type. Mismatch. Exception System. Argument. Out. Of. Range. Exception System. IO. File. Not. Found. Exception System. Out. Of. Memory. Exception System. Stack. Overflow. Exception А всего их - больше сотни Курс SE MSF. NET Введение в C# 48

Заключение • Существует язык программирования разработанный с учетом особенностей технологии. NET Framework • Для Заключение • Существует язык программирования разработанный с учетом особенностей технологии. NET Framework • Для разработки приложений существуют мощные визуальные средства • Сам язык достаточно прост для изучения Курс SE MSF. NET Введение в C# 49

Вопросы для закрепления материала • • Назовите два отличия C# от C++ Почему в Вопросы для закрепления материала • • Назовите два отличия C# от C++ Почему в C# отсутствуют деструкторы классов? Чем транслировать программы на C#? Зачем необходимо собственное пространство имен? Зачем нужна упаковка типов? Какие новые типы данных Вы узнали? Опишите назначение оператора foreach Что такое исключение? Курс SE MSF. NET Введение в C# 50

Ссылки • Учебник по C# – http: //www. dotsite. spb. ru/Tutorials/CSharp/ • Джесс Либерти Ссылки • Учебник по C# – http: //www. dotsite. spb. ru/Tutorials/CSharp/ • Джесс Либерти “Программирование на C#” 2 е изд. СПб-М. , Символ, 2003 • Троелсен Э. C# и платформа. NET. Библиотека программиста. – СПб. : Питер, 2002 • Фролов А. В. , Фролов Г. В. Язык C#. Самоучитель. -М. : ДИАЛОГ-МИФИ, 2003 Курс SE MSF. NET Введение в C# 51