1 / 80

Предварительные требования Изложение материала рассчитано на то что вы уже знаете:

Предварительные требования Изложение материала рассчитано на то что вы уже знаете: Основы программирования Переменные, директивы, функции, циклы, и т.п. Объектно-ориентированного программирования Классы, наследование, полиморфизм,члены классов, и т.п. Цели создания C#.

roscoe
Download Presentation

Предварительные требования Изложение материала рассчитано на то что вы уже знаете:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Предварительныетребования Изложение материала рассчитано на то что вы уже знаете: Основыпрограммирования Переменные, директивы, функции, циклы, и т.п. Объектно-ориентированного программирования Классы, наследование, полиморфизм,члены классов, и т.п.

  2. Цели создания C# • Компоненто-ориентированность • Все описывается объектами • Надёжное и безотказное ПО • Экономия капиталовложений

  3. Цели создания C#Компоненто-ориентированность C# первый “Компоненто-ориентированный” язык в семействе C/C++ Что такое компонент? • Независимый модуль который может многократно • использоваться и отдельно устанавливаться • Более грубая чем объект структура • (объекты это языко-зависимые конструкции) • Могут включать несколько классов • Часто не зависят от языка программирования • Как правило, разработчик и пользователь компонента не • знают друг друга, работают в разных компаниях, и • пользуются разными языками

  4. Цели создания C#Компоненто-ориентированность • Концепция разделения на компоненты • Свойства, методы, события • Атрибуты времени разработки и времени • исполнения • Интегрированная документация с использованием • XML • Принцип размещения кода в одном месте • Нет заголовочных файлов, файлов IDL, и т.п. • Можно встраивать в ASP страницы

  5. Цели создания C#Всё описывается объектами Традиционный взгляд • C++: Простые типы реализуются сами по себе без привлечения объектов • Smalltalk, Lisp: Простые типы реализованы как объекты, но за счёт потери производительности C# использует единое представление типов без потери производительности • Это упрощает конструкцию системы • Улучшенная расширяемость • Новые простые типы: Decimal, SQL… • Коллекции, и т.п., возможны для всех типов

  6. Цели создания C#Корректное и надёжноепрограммное обеспечение • Сборка мусора Отсутствуют утечки памяти и неверные указатели • Обработка исключений (Exceptions) • Безопасность использования типов Нет неинициализированных переменных, нет потенциальноопасных преобразований типов • Избегаются распространенные ошибки Например if (x = y) ... • One-stop programming Меньше перемещающихся частей программы

  7. Описание класса в С# должно содержать встроенное (inline) описание всех методов — в этом языке заголовочных файлов не бывает. Благодаря этому правилу разработчики классов могут создавать высоко мобильный код, что является одной из ключевых концепций среды .NET. • Создавая С#-класс, вы имеете полностью инкапсулированную связку функциональных возможностей, которую можно легко перенести в любую среду разработки, и вам не надо беспокоиться, как в другом языке обрабатываются включаемые файлы и существует ли в нем вообще механизм включения файлов. • Такой подход — универсальное программирование ("one-stopprogramming"-) — позволяет, например, перебросить весь класс на страницу ActiveServerPages (ASP), и он будет функционировать так, будто был скомпилирован для настольного приложения Windows!

  8. Цели создания C#Сохраняет ваши вложения • Наследство C++ Пространства имён, указатели (в небезопасном (unsafe) коде),беззнаковые типы данных, и т.п. • Способность к взаимодействию C# взаимодействует с XML, SOAP, COM, DLLs, илюбым языком .NET Framework

  9. ТипыОбзор • Программа C# это коллекция типов Классы, структуры, перечисляемые типы, интерфейсы, делегаты • C# имеет набор предопределённых типов Например int, byte, char, string, object, … • Вы можете создавать свои собственные типы • Все данные и код определяются внутри типов Нет глобальных переменных и глобальных функций

  10. ТипыОбзор Типы содержат: • Данные • Поля, константы, массивы • События • Функции • Методы, операторы, конструкторы, деструкторы • Свойства, индексаторы • Другие типы • Классы, структуры, перечисляемые типы, интерфейсы,делегаты

  11. ТипыОбзор • Можно создавать экземпляры типов… • …и затем использовать их: вызывать методы, считывать и присваивать свойства, и т.п. • Можно преобразовывать один тип в другой • Прямо и косвенно • Типы организуются в • Пространства имён, файлы, сборки • Есть две категории типов: размерные (value) и ссылочные (reference) • Типы имеют иерархию

  12. ТипыУнифицированная система типов • Размерные типы • Непосредственно содержат данные • Не могут быть пустыми (null) • Ссылочные типы • Содержат ссылки на объект • Могут быть пустыми (null) • inti = 123; • string s = "Hello world“;

  13. ТипыУнифицированная система типов • Размерные типы • Простые inti; float x; • Перечисляемые enum State { Off, On } • Структуры struct Point {intx,y;} • Ссылочные типы • Корневые object • Строки string • Классы class Foo: Bar, IFoo {...} • Интерфейсы interface IFoo: IBar {...} • Массивы string[] a = new string[10]; • Делегаты delegate void Empty();

  14. ТипыУнифицированная система типов

  15. ТипыУнифицированная система типов • Преимущества размерных типов • Не размещаются в куче, меньше работы для Сборщика мусора • Более эффективное использование памяти • Короче путь указывающий на данные • Унифицированная система типов • Нет разделения на простые типы и объекты

  16. Преобразования типов • Неявное преобразование • Происходит автоматически • Гарантированно выполняется успешно • Не теряется информация (точность) • Явное преобразование • Требует приведения типа • Может не сработать • Информация (точность) может быть потеряна • Оба явное и неявное преобразования должны быть заданы пользователем

  17. Преобразования типов • int x = 123456; • long y = x; // косвенное • short z = (short)x; // прямое • double d = 1.2345678901234; • float f = (float)d; // прямое • long l = (long)d; // прямое

  18. ТипыУнифицированная система типов • Всё описывается объектами • Все типы наследуются от объекта object • Любые данные могут быть сохранены, переданы, и обработаны без дополнительной работы

  19. ТипыУнифицированная система типов • Полиморфизм Возможность выполнять операции над объектом без знания точного типа этого объекта void Poly(object o) { Console.WriteLine(o.ToString()); } Poly(42); Poly(“abcd”); Poly(12.345678901234m); Poly(new Point(23,45));

  20. ТипыУнифицированная система типов • Вопрос: Как применяется полиморфизм к работе с размерными и ссылочными типами? Как переменная типа int (размерный тип) преобразуется в object (ссылочный тип)? • Ответ: Упаковка (boxing)! Упаковываются только размерные типы Ссылочные типы не упаковываются

  21. ТипыУнифицированная система типов Упаковка • Копирование переменной размерного типа в переменную ссылочного типа (object) • Каждому размерному типу соответствует “скрытый” ссылочный тип • Отметим, что из переменой размерного типа создаётся новая переменная ссылочного типа • Нет простой передачи указателя на переменную • Размерный тип неявно преобразуется в объект, ссылочный тип • Восходящее преобразование типов ( “upcast”)

  22. ТипыУнифицированная система типов Распаковка (unboxing) • Операция обратная упаковке • Копирует упакованное значение • Копирует из ссылочного типа в размерный • Требует явного преобразования типов • Может не сработать (как и все явные преобразования) • Нисходящее преобразование типов (“down cast”)

  23. ТипыУнифицированная система типов Упаковка и распаковка • int i = 123;//i->123 • object o = i; //o->System.Int32->123 • int j = (int)o; //j->123

  24. ТипыУнифицированная система типов Преимущества упаковки • Распространяет полиморфизм на все классы • Классы коллекций работают со всеми типами • Отпадает необходимость в классах оболочках • Заменяет тип Variant в OLE Automation Недостатки упаковки • Снижается производительность

  25. ТипыПредопределённые типы • Размерные • Целые типы • Вещественные типы • Десятичный • Логический • Символ • Ссылочные • Объект • Строка

  26. Предопределённые типыТипы значений • Всё это предопределённые структуры • Беззнаковые byte, ushort, uint, ulong • Знаковые sbyte, short, int, long • Логический bool • Символ char • Вещественные float, double, decimal

  27. Предопределённые типыЦелые типы

  28. Предопределённые типыВещественные типы • Согласно спецификации IEEE 754 • Поддержка ± 0, ± Бесконечность, NaN

  29. Предопределённые типыdecimal (десятичный) • 128 бит • 96 битовое значение масштабируемоестепенью 10 • Более точное представление десятичныхзначений • Не поддерживает нули со знаками,бесконечности и NaN

  30. Предопределённые типыdecimal (десятичный) • Целый тип может быть неявно преобразован в десятичный • Преобразование между десятичным и вещественными типами должно быть явно указано, так как возможна потеря точности • s * m * 10e • s = 1 или –1 • 0 ≤ m ≤ 296 • -28 ≤ e ≤ 0

  31. Предопределённые типыЛитеры для целых чисел Целые числа можно задавать в десятичной или шестнадцатеричной нотации • U или u: uintили ulong • L или l: long или ulong • UL или ul: ulong 123 // Десятичное 0x7B // Шестнадцатеричное 123U // Беззнаковое 123ul // Беззнаковое длинное целое 123L // Длинное целое

  32. Предопределённые типыЛитеры для вещественных чисел • F или f: float • D или d: double • M или m: decimal • 123f // Float • 123D // Double • 123.456m // Decimal • 1.23e2f // Float • 12.3E1M // Decimal

  33. Предопределённые типыbool(Логический) • Для представления логических значений true и false • Нельзя использовать 1 и 0 в качестве логических значений • Нет стандартного преобразования между bool и другими типами

  34. Предопределённые типыchar (Символ) • Для представления символов Unicode • Литеры • ‘A’ // Простой символ • ‘\u0041’ // Unicode • ‘\x0041’ // Шестнадцатеричное //беззнаковоекороткое целое • ‘\n’ // Символ Escape //последовательности

  35. Предопределённые типыchar (Символ) • Некоторые символы Esc последовательности Символ Описание Значение \n Новая строка 0x000A \r Возврат каретки 0x000D \t Табуляция 0x0009 \0 Ноль 0x0000 \\ Обратная косая черта 0x005C \” Двойная кавычка 0x0022 \’ Одинарная кавычка 0x0027

  36. Предопределённые типыТипы ссылок • Строка символов string • Корневой тип object

  37. Предопределённые типыobject Корневой объект в иерархии • Дополнительно к данным резервируется • 0 байт для типов значений • 8 для типов ссылок • В действительности ссылка (не объект) занимает 4 байта

  38. Предопределённые типыВнешние методы object • public bool Equals(object) • protected void Finalize() • public int GetHashCode() • public System.Type GetType() • protected object MemberwiseClone() • public void Object() • public string ToString()

  39. Предопределённые типыstring (строка) • Непрерывная последовательность символов в формате Unicode • Ссылочный тип string s = “I am a string”;

  40. Предопределённые типыstring (строка) • В обычных строках можно использовать esc последовательности. string s1= “\\\\server\\fileshare\\filename.cs”; • В строках начинающихся с @: Большинство Esc последовательностей игнорируется Исключение для “” Допускается перенос на следующую строку • string s2 = @”\\server\fileshare\filename.cs”;

  41. ТипыТипы определяемые пользователем • Перечисление enum • Размерный тип struct • Ссылочный тип class • Массив int[], string[] • Интерфейс interface • Указатель на функцию delegate

  42. ТипыПеречисления • Перечисление задаёт имя типа для группы связанных по смыслу символических констант • Выбор значения из группы должен быть известен на этапе компилирования • Сильное типизирование • Не допускаются неявные преобразования в/из целого типа • Разрешено явное преобразование • Операторы: +, -, ++, --, &, |, ^, ~, … • Можно указать внутренний тип • byte, sbyte, short, ushort, int, uint, long, ulong

  43. ТипыПеречисления enum Color: byte { Red = 1, Green = 2, Blue = 4, Black = 0, White = Red | Green | Blue } Color c = Color.Black; Console.WriteLine(c); // 0 Console.WriteLine(c.Format()); // Black

  44. ТипыПеречисления • Все перечисляемые типы происходят от • System.Enum • Он обеспечивает методы для • Определения внутреннего типа • Проверки возможно ли указанное значение • Инициализации из строковой константы • Извлечения всех значений типа

  45. ТипыМассивы • Массивы используются для сохранения группы элементов определённого типа в непрерывном блоке памяти • Массивы это ссылочные типы • Происходят от System.Array • Индекс с нуля • Могут быть многоразмерными • Массивы знают свою длину и размерность • Проверка выхода за границы массива

  46. ТипыМассивы • Объявление int[] primes; • Размещение int[] primes = new int[9]; • Инициализация int[] prime = new int[] {1,2,3,5,7,11,13,17,19}; int[] prime = {1,2,3,5,7,11,13,17,19}; • Доступ к массиву и присвоение значений prime2[i] = prime[i]; • Перебор элементов foreach (int i in prime) Console.WriteLine(i);

  47. ТипыМассивы • Многоразмерные массивы • Прямоугольные • int[,] matR = new int[2,3]; • Можно инициализировать при объявлении • int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} }; • Неопределённой формы • Массив массивов • int[][] matJ = new int[2][]; • Следует инициализировать программно

  48. ТипыИнтерфейсы • Интерфейс определяет контакт • Содержит методы, свойства, индексаторы, события • Любой класс или структура реализующая интерфейс должнаподдерживать все его составляющие • Интерфейсы обеспечивают полиморфизм • Многие классы и структуры могут реализовывать одинопределённый интерфейс • Не содержат реализации • Должны быть реализованы классом или структурой

  49. ТипыКлассы • Определяемый пользователем ссылочный тип • Аналогичен классам C++ и Java • Наследование только от одного класса • Наследование нескольких интерфейсов

  50. ТипыКлассы • Члены класса • Константы, поля, методы, операторы, конструкторы, деструкторы • Свойства, индексаторы, события • Статические члены и члены экземпляра • Доступ к членам класса • private, protected, public, internal, protected internal • По умолчанию private • Экземпляр класса создаётся оператором new

More Related