Скачать презентацию План лекции Новый язык программирования C Скачать презентацию План лекции Новый язык программирования C

Лекция 01-2 (Введение в С#).ppt

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

План лекции • • Новый язык программирования C# Структура программы Понятие класса Состав класса План лекции • • Новый язык программирования C# Структура программы Понятие класса Состав класса Поля Свойства Методы Переменные программы

1. Новый язык программирования С# 1. Новый язык программирования С#

Общие сведения по языку C# • • Появился в 2001 году. Основан на языках Общие сведения по языку C# • • Появился в 2001 году. Основан на языках Java и Visual Basic Общий прародитель C++ В первой версии языка: – 80 ключевых слов – 12 встроенных (базовых) типов данных • Включает все необходимое для создания объектно-ориентированных, компонентных программ. • Одобрен в качестве международного стандарта ECMA (ECMA-334) и ISO(ISO/IEC 23270)

Версии языка • Версия С# 1. 0 – 2001 г. (для Framework 1. 0) Версии языка • Версия С# 1. 0 – 2001 г. (для Framework 1. 0) • Версия С# 2. 0 – 2005 г. (для Framework 2. 0) • Версия C# 3. 0 – 2007 г. (для Framework 3. 5) C# Java С++

Андерс Хейлсберг (Anders Hejlsberg) • Главный проектировщик и ведущий архитектор. • Датский учёный в Андерс Хейлсберг (Anders Hejlsberg) • Главный проектировщик и ведущий архитектор. • Датский учёный в области информатики. • В 1980 году он написал компилятор языка Паскаль, который продал фирме Borland (этот компилятор дожил до 7 версии (Borland Pascal). • До 1996 года главный проектировщик фирмы Borland, создал новое поколение компиляторов Паскаля: получился язык Delphi. • В 1996 году перешёл в Microsoft, где работал над языком J++ и библиотекой С++ - Windows Foundation Classes. • Позже возглавил комиссию по созданию и проектированию языка C#.

Программа на С# • Программа это набор взаимосвязанных классов. • Класс содержит данные и Программа на С# • Программа это набор взаимосвязанных классов. • Класс содержит данные и функции • В одном из классов должна быть функция Main, с этой функции начинается выполнение программы • Классы могут быть в разных файлах, в разных сборках (в библиотеках классов). • На внешние модули (библиотеки, или выполняемые модули) должны быть ссылки (references). • Для удобства ссылок на классы программы, желательно использовать пространство имен • Для удобства записи имен внешних классов можно использовать оператор using.

Структура программы (сборки) на языке С# Сборка Z. dll Сборка X. exe Class A Структура программы (сборки) на языке С# Сборка Z. dll Сборка X. exe Class A Class Q Class C Class M Class V Class T ссылки Сборка Y. dll Class G Class K static void Main () …. Class F

Типы данных программы • Встроенные типы (int, float, …) • Пользовательские типы - классы Типы данных программы • Встроенные типы (int, float, …) • Пользовательские типы - классы (class)

Классы • Основные составные части программы на языке C# • Задают новые типы данных Классы • Основные составные части программы на языке C# • Задают новые типы данных • Класс и тип – почти синонимы в С# • Везде, где могут использоваться встроенные типы, могут использоваться и классы – пользовательские типы.

Описание классов программы using XXX; // чужие пространства имен namespace MMM // наше пространство Описание классов программы using XXX; // чужие пространства имен namespace MMM // наше пространство имен { class AAA // наш класс MMM. AAA { … } class BBB // другой наш класс MMM. BBB { … } }

Составные элементы класса 1. Поля (field) – обычно скрытые данные класса (внутренне состояние) 2. Составные элементы класса 1. Поля (field) – обычно скрытые данные класса (внутренне состояние) 2. Свойства (property) – доступ к данным класса с помощью функций – – get – получить set – задать 3. Методы (methods) – операции над данными класса (поведение) (можно называть функциями) 4. События (event) – оповещение пользователей класса о том, что произошло что-то важное.

Доступ к элементам класса • public вызов или доступ откуда угодно • protected только Доступ к элементам класса • public вызов или доступ откуда угодно • protected только из производных классов (соответствует модификатору “family” в CLI) • private доступ только внутри текущего класса

Функция Main • Выполнение программы начинается со статической функции с именем Main • Заголовок Функция Main • Выполнение программы начинается со статической функции с именем Main • Заголовок функции static void Main (string[ ] arg) {…} static void Main () {…} static int Main (string[ ] arg) {…} static int Main () {…} • В самом простом случае – выполняет некоторый алгоритм без использования объектов классов • Обычно создает экземпляры классов и вызывает их методы для решения задачи • может создать экземпляр того класса в котором находится сама и вызвать некоторый не статический метод решения задачи

Размещение описания методов класса и объектов Класс Point (); class Point { dist (); Размещение описания методов класса и объектов Класс Point (); class Point { dist (); static int n=0; n = 0; private int _x; рrivate int _y; public Point () { _x=_y=0; 10258 x = 0; y = 0; } public double dist() { 10300 x = 0; y = 0; double d; d=_x*_x+_y*_y; d = Math. Sqrt(d); 10324 x = 0; y = 0; return d; } } static void Main () { Point p; p = new Point(); double ds = p. dist(); { Point p 1 = new Point(); Console. Write (p 1. dist()); } Point p 2 = new Point(); }

Классы и файлы • Классы записываются в файле с расширением *. cs, например, main. Классы и файлы • Классы записываются в файле с расширением *. cs, например, main. cs • В одном файле может быть описано несколько классов – в любом порядке • Один класс может описываться в нескольких файлах (начиная с C# 2. 0) – модификатор patial (перед словом class)

Простая программа на C# class Hello { static void Main( ) { // Use Простая программа на C# class Hello { static void Main( ) { // Use the system console object System. Console. Write. Line("Hello World"); } } • Запуск на выполнение – в режиме отладки F 5 – без отладки Ctrl – F 5 (остановка после выполнения)

Пример простого класса namespace Test. Prog // наше пространство имен { class Point // Пример простого класса namespace Test. Prog // наше пространство имен { class Point // наш класс MMM. Point { public int x, y; // поля класса } class Program { static void Main( ) { Point a; a = new Point(); a. x = 4; a. y = 3; } } }

Пример простого класса со свойствами namespace Test. Prog // наше пространство имен { class Пример простого класса со свойствами namespace Test. Prog // наше пространство имен { class New. Point // наш класс MMM. Point { private int _x, _y; // поля класса public int x { get { return _x; } set { _x = value; } } … } }

Использование описанного класса namespace Test. Prog // наше пространство имен { class Progr { Использование описанного класса namespace Test. Prog // наше пространство имен { class Progr { static void Main( ) { New. Point a; a = new New. Point(); a. _x = 4; // error a. x = 4; // correct int a = a. x; } } }

Пример простого класса с методами class Point // наш класс MMM. Point { private Пример простого класса с методами class Point // наш класс MMM. Point { private int _x, _y; // поля класса public int X // свойства класса { get {…} set {…} } // методы - конструктор public Point () {x=0; y=0; } // вычисление длины public double dist () {return Math. Sqrt(_x*_x + _y*_y); } }

namespace Test. Prog // наше пространство имен { class Progr { static void Main( namespace Test. Prog // наше пространство имен { class Progr { static void Main( ) { Point a; a = new Point(3, 4); a. x = 4; // correct double r; r = a. dist(); } } }

Использование класса Объекты одного класса могут использоваться в других классах … <class name> a; Использование класса Объекты одного класса могут использоваться в других классах … a; a = new (…); b = a. (…); a. = c; c = a. ;

Переменные программы Переменные программы

Единая система типов . Net Framework • Традиционное представление о примитивных (встроенных типах) – Единая система типов . Net Framework • Традиционное представление о примитивных (встроенных типах) – В C++, Java они являются “магическими” – В Smalltalk, Lisp это полнофункциональные типы • C# объединяет эти подходы без потери производительности – Углубленная простота во все системе • Улучшенная расширяемость и повторная используемость – Новые примитивные типы, например, decimal – Коллекции, и т. п. , могут использоваться для всех типов

Переменные программы • Место для хранения данных • Имеют – названия (имена, идентификаторы). – Переменные программы • Место для хранения данных • Имеют – названия (имена, идентификаторы). – Тип – Модификаторы [<модификаторы>] <тип> <имя> [= <значение>]; [<модификаторы>] = [<режим доступа>] [static] [const] public int x = 5; public static const int n=10;

Специальная переменная this • Ссылка на самого себя (на сам объект, в котором используется) Специальная переменная this • Ссылка на самого себя (на сам объект, в котором используется) • Нигде не объявляется

Типы переменных по области видимости • Уровня класса (статические переменные класса) – Доступ с Типы переменных по области видимости • Уровня класса (статические переменные класса) – Доступ с помощью имени класса – Время жизни – время работы программы – Доступ из всех классов (если public) • Уровня объекта класса (поля) – Доступ с помощью ссылки на объект – Время жизни – от new до удаления ссылок – Доступ в методах класса (если public то из других классов) • Уровня метода (локальные переменные) – Доступ по имени – Время жизни – выполнения метода – Доступны только в методе после объявления

Типы в C# Ссылочные типы Массивы Классы Значащие типы Делегаты Интерфейсы Структуры Перечисления Простые Типы в C# Ссылочные типы Массивы Классы Значащие типы Делегаты Интерфейсы Структуры Перечисления Простые типы Nullable types Строки

Создание переменных • Значащие типы – создаются в стеке – автоматически уничтожаются • Ссылочные Создание переменных • Значащие типы – создаются в стеке – автоматически уничтожаются • Ссылочные типы – создаются в 2 шага • сперва объявляются – выделяется память в стеке для хранения адреса • затем выделяется память в куче с помощью оператора new

Различие между типами int v = 123; string s = “Hello World!”; Значение v Различие между типами int v = 123; string s = “Hello World!”; Значение v s 123 Адрес 254 688 Hello World!

Наследование типов в CLR Наследование типов в CLR

Методы класса System. Object • Equals - виртуальный метод, возвращающий true если значения объектов Методы класса System. Object • Equals - виртуальный метод, возвращающий true если значения объектов совпадают (по умолчанию, если два объекта расположены в одном месте памяти). • Get. Hash. Code - виртуальный метод, возвращает некоторое целое число (хэш-код), однозначно идентифицирующее экземпляр класса. • Get. Type - возвращает объект типа Type, описывающий соответствующий тип. • To. String - виртуальный метод, возвращающий символьное представление значения переменной (по умолчанию возвращает строку, представляющую полное имя типа объекта).

Встроенные типы Type Size . Net Type Описание byte 1 Byte 0 -255 со Встроенные типы Type Size . Net Type Описание byte 1 Byte 0 -255 со знаком char 2 Char символы Unicode Bool 1 Boolean true или false. sbyte 1 SByte -128 --- +127 со знаком short 2 Int 16 Целые от -32, 768 до +32, 767 со знаком ushort 2 UInt 16 Целые от 0 до 65 535 без знака int 4 Int 32 от -2, 147, 483, 648 до +2, 147, 483, 647 uint 4 UInt 32 целые числа без знака от 0 до 4 294 967 295 float 4 Single от ± 1. 5 × 10 -45 до ± 3. 4 × 1038 ( 7 цифр) double 8 Double от ± 5. 0 × 10 -324 до ± 1. 7 × 10308 (16 цифр) decimal 16 Decimal ± 1. 0 × 10− 28 to ± 7. 9 × 1028 (28 значащих цифр) long 8 Int 64 от -9 223 372 036 854 775 808 до + 9 223 372 036 854 775 807 ulong 8 UInt 64 от 0 до 0 x. FFFFFFFF

Тип данных bool • Соответствует системному типу System. Boolean • Mожет хранить только значения Тип данных bool • Соответствует системному типу System. Boolean • Mожет хранить только значения констант true и false (булевые константы) • Можно назначать только булевые значения или константы, а также значений логического выражения: bool bc = (c > 64 && c < 123);

Преобразование типов • Неявное преобразование – К неявным относятся те преобразования, результат выполнения которых Преобразование типов • Неявное преобразование – К неявным относятся те преобразования, результат выполнения которых всегда успешен и не приводит к потере точности данных. – Неявные преобразования выполняются автоматически. – Если на диаграмме есть переход из типа A в тип B то, выполняется неявное преобразование типов • Явное преобразование – К явным относятся разрешенные преобразования, успех выполнения которых не гарантируется или может приводить к потере точности – Использование приведения типов (cast) • int i = (int) f; // с обрезанием дробной части – Использование стандартного класса Convert • int i = Convert. To. Int 32(f); // с округлением до ближайшего целого

Неявное приведение типов decimal ulong double uint float ushort byte char short sbyte Неявное приведение типов decimal ulong double uint float ushort byte char short sbyte

Применение диаграммы • Если на диаграмме задан путь (стрелками) от типа А к типу Применение диаграммы • Если на диаграмме задан путь (стрелками) от типа А к типу В, то это означает существование неявного преобразования из типа А в тип В. – Например из short в float • Все остальные преобразования между подтипами арифметического типа существуют, но являются явными. – Например из float в int

Неявное и явное преобразование // Error: no conversion from int to short int x=5, Неявное и явное преобразование // Error: no conversion from int to short int x=5, y=6; short z = x + y; int a = 5; float b = 1. 5 F; b = a; // нужно явное преобразование (кастинг) a = (int)b;

Преобразование типов с помощью класса Convert • Класс Convert содержит 15 статических методов вида Преобразование типов с помощью класса Convert • Класс Convert содержит 15 статических методов вида To (To. Boolean(), . . . To. UInt 64()); string s 1 = Console. Read. Line(); int ux = Convert. To. UInt 32(s 1); • Все методы To класса Convert перегружены и каждый из них имеет, как правило, более десятка реализаций с аргументами разного типа. • Существует возможность преобразования к системному типу Date. Time, System. Date. Time dat = Convert. To. Date. Time("15. 03. 2003");

Пример преобразования типов System. Single f = 0. 5 F; float b = f; Пример преобразования типов System. Single f = 0. 5 F; float b = f; int a; a = (int)f; // с обрезанием дробной части a = Convert. To. Int 32(f); // с округлением string s = "123"; // a = (int)s; a = Convert. To. Int 32(s);

Методы классов Методы классов

Методы программы • Могут описываться только внутри классов • Имеют доступ – к закрытым Методы программы • Могут описываться только внутри классов • Имеют доступ – к закрытым и открытым переменным класса (полям) в котором описаны – могут содержать локальные переменные

Описание и вызов метода • Описание метода содержит <заголовок_метода> { тело_метода } • Синтаксис Описание и вызов метода • Описание метода содержит <заголовок_метода> { тело_метода } • Синтаксис заголовка метода – [модификаторы] {тип_результата} имя_метода ([список_формальных_параметров]) • Вызов метода – имя_метода([список_фактических_параметров])

Описание метода <type> name (parameters) // method header { statement; Method body … statement; Описание метода name (parameters) // method header { statement; Method body … statement; return X; }

 • Операторы и разделители языков Java и C#: –(){}[]; , . : ? • Операторы и разделители языков Java и C#: –(){}[]; , . : ? ~ –=<>!+-*/%&|^ – == <= >= != += -= *= /= %= &= |= ^= – && || ++ -- << >> <<= >>= • Дополнительные операторы C#: – -> : : ? ?

Операторы языка С# Операторы языка С#

Операторы С# • Во многом совпадают с операторами Java • Выражения – Арифметические – Операторы С# • Во многом совпадают с операторами Java • Выражения – Арифметические – Логические – Условия - if • Цикла – do, while, foreach • Переключатели – switch • Перехода - goto

 • оператор goto aaa; c= a + b; aaa: a = 5; • • оператор goto aaa; c= a + b; aaa: a = 5; • операция ? : int a = 5, b = 7; n = (a < b) ? 1 : 5;

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

Понятие операции • Встроенное действие над операндами (переменными и константами) • В С# имеется Понятие операции • Встроенное действие над операндами (переменными и константами) • В С# имеется множество операций (около 50) • В операциях могут участвовать размерные и ссылочные типы

 • Операции выполняются над операндами одного типа • Если же операнды разных типов, • Операции выполняются над операндами одного типа • Если же операнды разных типов, то предварительно происходит неявное преобразование типа операнда. • Если оно не возможно, то ошибка • short -> int -> float -> double -> decimal

Приоритет Категория Операции Порядок 0 Первичные (expr) x. y f(x) a[x] x++ x-- new Приоритет Категория Операции Порядок 0 Первичные (expr) x. y f(x) a[x] x++ x-- new typeof(t) 1 Унарные + - ! ~ ++x --x (T)x 2 Мультипликативные * / % 3 Аддитивные + - 4 Сдвиг << >> 5 Отношения, проверка типов < > <= >= is as 6 Эквивалентность == != 7 Логическое & 8 Логическое исключающее ИЛИ (XOR) ^ 9 Логическое ИЛИ (OR) | 10 Условное И && 11 Условное ИЛИ || 12 Условное выражение ? : 13 Присваивание = *= /= %= += -= <<= >>= &= ^= |=

 • Операторы и разделители языков Java и C#: –(){}[]; , . : ? • Операторы и разделители языков Java и C#: –(){}[]; , . : ? ~ –=<>!+-*/%&|^ – == <= >= != += -= *= /= %= &= |= ^= – && || ++ -- << >> <<= >>= • Дополнительные операторы C#: – -> : : ? ?

Вызов метода My. Class a = new My. Class(); x = a. My. Method(val Вызов метода My. Class a = new My. Class(); x = a. My. Method(val 1, val 2, … , val. N); d = (b + a. My. Method(5))/3. 14; float My. Method (double a) x = (5+2)/3. 14; a = func(x); { double w; x = a*25. 7/5. 6; return x; }

Операторы и операция языка C# • Присвоения (операция =) • Арифметические выражения (операции +, Операторы и операция языка C# • Присвоения (операция =) • Арифметические выражения (операции +, -, /, *) • Условный (if else) – Операции сравнения – Логические операции • Циклы (while, foreach) • Создание объектов классов (операция new) • Операция преобразования типа.

Формальные параметры методов • По умолчанию параметры передаются по значению. • Значением переменной ссылочного Формальные параметры методов • По умолчанию параметры передаются по значению. • Значением переменной ссылочного типа является ее адрес. • Можно задать передачу параметров по ссылке – ref – параметр должен иметь начальное значение – out – параметр может не иметь начального значения • Синтаксис объявления формального параметра [ref | out] <тип> имя