slide1
Download
Skip this Video
Download Presentation
Предварительные требования Изложение материала рассчитано на то что вы уже знаете:

Loading in 2 Seconds...

play fullscreen
1 / 80

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


  • 147 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Предварительные требования Изложение материала рассчитано на то что вы уже знаете:' - roscoe


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
Предварительныетребования

Изложение материала рассчитано на то что вы

уже знаете:

Основыпрограммирования

Переменные, директивы, функции, циклы, и т.п.

Объектно-ориентированного программирования

Классы, наследование, полиморфизм,члены классов, и т.п.

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

C# первый “Компоненто-ориентированный” язык в

семействе C/C++

Что такое компонент?

  • Независимый модуль который может многократно
  • использоваться и отдельно устанавливаться
  • Более грубая чем объект структура
  • (объекты это языко-зависимые конструкции)
  • Могут включать несколько классов
  • Часто не зависят от языка программирования
  • Как правило, разработчик и пользователь компонента не
  • знают друг друга, работают в разных компаниях, и
  • пользуются разными языками
slide4
Цели создания C#Компоненто-ориентированность
  • Концепция разделения на компоненты
  • Свойства, методы, события
  • Атрибуты времени разработки и времени
  • исполнения
  • Интегрированная документация с использованием
  • XML
  • Принцип размещения кода в одном месте
  • Нет заголовочных файлов, файлов IDL, и т.п.
  • Можно встраивать в ASP страницы
slide5
Цели создания C#Всё описывается объектами

Традиционный взгляд

  • C++: Простые типы реализуются сами по

себе без привлечения объектов

  • Smalltalk, Lisp: Простые типы реализованы как

объекты, но за счёт потери производительности

C# использует единое представление типов

без потери производительности

  • Это упрощает конструкцию системы
  • Улучшенная расширяемость
  • Новые простые типы: Decimal, SQL…
  • Коллекции, и т.п., возможны для всех типов
slide6
Цели создания C#Корректное и надёжноепрограммное обеспечение
  • Сборка мусора

Отсутствуют утечки памяти и неверные указатели

  • Обработка исключений (Exceptions)
  • Безопасность использования типов

Нет неинициализированных переменных, нет потенциальноопасных преобразований типов

  • Избегаются распространенные ошибки

Например if (x = y) ...

  • One-stop programming

Меньше перемещающихся частей программы

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

Пространства имён, указатели (в небезопасном

(unsafe) коде),беззнаковые типы данных, и т.п.

  • Способность к взаимодействию

C# взаимодействует с XML, SOAP, COM, DLLs, илюбым языком .NET Framework

slide9
ТипыОбзор
  • Программа C# это коллекция типов

Классы, структуры, перечисляемые типы,

интерфейсы, делегаты

  • C# имеет набор предопределённых типов

Например int, byte, char, string, object, …

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

Нет глобальных переменных и глобальных

функций

slide10
ТипыОбзор

Типы содержат:

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

считывать и присваивать свойства, и т.п.

  • Можно преобразовывать один тип в другой
    • Прямо и косвенно
  • Типы организуются в
    • Пространства имён, файлы, сборки
  • Есть две категории типов:

размерные (value) и ссылочные (reference)

  • Типы имеют иерархию
slide12
ТипыУнифицированная система типов
  • Размерные типы
    • Непосредственно содержат данные
    • Не могут быть пустыми (null)
  • Ссылочные типы
    • Содержат ссылки на объект
    • Могут быть пустыми (null)
  • inti = 123;
  • string s = "Hello world“;
slide13
ТипыУнифицированная система типов
  • Размерные типы
    • Простые 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();
slide15
ТипыУнифицированная система типов
  • Преимущества размерных типов
    • Не размещаются в куче, меньше работы для

Сборщика мусора

    • Более эффективное использование памяти
    • Короче путь указывающий на данные
    • Унифицированная система типов
      • Нет разделения на простые типы и объекты
slide16
Преобразования типов
  • Неявное преобразование
    • Происходит автоматически
    • Гарантированно выполняется успешно
    • Не теряется информация (точность)
  • Явное преобразование
    • Требует приведения типа
    • Может не сработать
    • Информация (точность) может быть потеряна
  • Оба явное и неявное преобразования

должны быть заданы пользователем

slide17
Преобразования типов
  • int x = 123456;
  • long y = x; // косвенное
  • short z = (short)x; // прямое
  • double d = 1.2345678901234;
  • float f = (float)d; // прямое
  • long l = (long)d; // прямое
slide18
ТипыУнифицированная система типов
  • Всё описывается объектами
    • Все типы наследуются от объекта object
    • Любые данные могут быть сохранены, переданы, и обработаны без дополнительной работы
slide19
ТипыУнифицированная система типов
  • Полиморфизм

Возможность выполнять операции над объектом без знания точного типа этого объекта

void Poly(object o) {

Console.WriteLine(o.ToString());

}

Poly(42);

Poly(“abcd”);

Poly(12.345678901234m);

Poly(new Point(23,45));

slide20
ТипыУнифицированная система типов
  • Вопрос: Как применяется полиморфизм к

работе с размерными и ссылочными типами?

Как переменная типа int (размерный тип)

преобразуется в object (ссылочный тип)?

  • Ответ: Упаковка (boxing)!

Упаковываются только размерные типы

Ссылочные типы не упаковываются

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

Упаковка

  • Копирование переменной размерного типа в

переменную ссылочного типа (object)

  • Каждому размерному типу соответствует

“скрытый” ссылочный тип

  • Отметим, что из переменой размерного типа

создаётся новая переменная ссылочного типа

    • Нет простой передачи указателя на переменную
  • Размерный тип неявно преобразуется в объект,

ссылочный тип

    • Восходящее преобразование типов ( “upcast”)
slide22
ТипыУнифицированная система типов

Распаковка (unboxing)

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

Упаковка и распаковка

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

Преимущества упаковки

  • Распространяет полиморфизм на все классы
  • Классы коллекций работают со всеми типами
  • Отпадает необходимость в классах оболочках
  • Заменяет тип Variant в OLE Automation

Недостатки упаковки

  • Снижается производительность
slide25
ТипыПредопределённые типы
  • Размерные
    • Целые типы
    • Вещественные типы
    • Десятичный
    • Логический
    • Символ
  • Ссылочные
    • Объект
    • Строка
slide26
Предопределённые типыТипы значений
  • Всё это предопределённые структуры
  • Беззнаковые byte, ushort, uint, ulong
  • Знаковые sbyte, short, int, long
  • Логический bool
  • Символ char
  • Вещественные float, double, decimal
slide28
Предопределённые типыВещественные типы
  • Согласно спецификации IEEE 754
  • Поддержка ± 0, ± Бесконечность, NaN
decimal
Предопределённые типыdecimal (десятичный)
  • 128 бит
  • 96 битовое значение масштабируемоестепенью 10
  • Более точное представление десятичныхзначений
  • Не поддерживает нули со знаками,бесконечности и NaN
decimal1
Предопределённые типыdecimal (десятичный)
  • Целый тип может быть неявно преобразован

в десятичный

  • Преобразование между десятичным и

вещественными типами должно быть явно

указано, так как возможна потеря точности

  • s * m * 10e
  • s = 1 или –1
  • 0 ≤ m ≤ 296
  • -28 ≤ e ≤ 0
slide31
Предопределённые типыЛитеры для целых чисел

Целые числа можно задавать в десятичной

или шестнадцатеричной нотации

  • U или u: uintили ulong
  • L или l: long или ulong
  • UL или ul: ulong

123 // Десятичное

0x7B // Шестнадцатеричное

123U // Беззнаковое

123ul // Беззнаковое длинное целое

123L // Длинное целое

slide32
Предопределённые типыЛитеры для вещественных чисел
  • F или f: float
  • D или d: double
  • M или m: decimal
  • 123f // Float
  • 123D // Double
  • 123.456m // Decimal
  • 1.23e2f // Float
  • 12.3E1M // Decimal
slide33
Предопределённые типыbool(Логический)
  • Для представления логических значений

true и false

  • Нельзя использовать 1 и 0 в качестве

логических значений

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

Символ Описание Значение

\n Новая строка 0x000A

\r Возврат каретки 0x000D

\t Табуляция 0x0009

\0 Ноль 0x0000

\\ Обратная косая черта 0x005C

\” Двойная кавычка 0x0022

\’ Одинарная кавычка 0x0027

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

Корневой объект в иерархии

  • Дополнительно к данным резервируется
    • 0 байт для типов значений
    • 8 для типов ссылок
  • В действительности ссылка (не объект) занимает 4 байта
object1
Предопределённые типыВнешние методы object
  • public bool Equals(object)
  • protected void Finalize()
  • public int GetHashCode()
  • public System.Type GetType()
  • protected object MemberwiseClone()
  • public void Object()
  • public string ToString()
string
Предопределённые типыstring (строка)
  • Непрерывная последовательность символов

в формате Unicode

  • Ссылочный тип

string s = “I am a string”;

string1
Предопределённые типыstring (строка)
  • В обычных строках можно использовать esc

последовательности.

string s1= “\\\\server\\fileshare\\filename.cs”;

  • В строках начинающихся с @:

Большинство Esc последовательностей

игнорируется

Исключение для “”

Допускается перенос на следующую строку

  • string s2 = @”\\server\fileshare\filename.cs”;
slide41
ТипыТипы определяемые пользователем
  • Перечисление enum
  • Размерный тип struct
  • Ссылочный тип class
  • Массив int[], string[]
  • Интерфейс interface
  • Указатель на функцию delegate
slide42
ТипыПеречисления
  • Перечисление задаёт имя типа для группы

связанных по смыслу символических констант

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

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

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

группы элементов определённого типа в

непрерывном блоке памяти

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

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);

slide47
ТипыМассивы
  • Многоразмерные массивы
    • Прямоугольные
      • int[,] matR = new int[2,3];
      • Можно инициализировать при объявлении
      • int[,] matR = new int[2,3] { {1,2,3}, {4,5,6} };
    • Неопределённой формы
      • Массив массивов
      • int[][] matJ = new int[2][];
      • Следует инициализировать программно
slide48
ТипыИнтерфейсы
  • Интерфейс определяет контакт
    • Содержит методы, свойства, индексаторы, события
    • Любой класс или структура реализующая интерфейс должнаподдерживать все его составляющие
  • Интерфейсы обеспечивают полиморфизм
    • Многие классы и структуры могут реализовывать одинопределённый интерфейс
  • Не содержат реализации
    • Должны быть реализованы классом или структурой
slide49
ТипыКлассы
  • Определяемый пользователем ссылочный

тип

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

конструкторы, деструкторы

    • Свойства, индексаторы, события
    • Статические члены и члены экземпляра
  • Доступ к членам класса
    • private, protected, public, internal,

protected internal

      • По умолчанию private
  • Экземпляр класса создаётся оператором new
slide51
ТипыСтруктуры
  • Похожи на классы, но
    • Размерный тип, определяется пользователем
    • Всегда наследуется от типа object
  • Идеален для небольших объектов
    • Определяемые пользователем “простые” типы
      • Комплексное число, точка, прямоугольник, цвет
slide52
ТипыСтруктуры
  • Могут наследовать несколько интерфейсов
  • Те же члены что и в классе
  • Доступ к членам структуры
    • internal, public, private
  • Экземпляры создаются оператором new
slide53
ТипыДелегаты
  • Делегат это ссылочный тип который

определяет метод

  • Экземпляр делегата может содержать один

или несколько методов

    • Объектно-ориентированный указатель на

функцию

  • Основа для обработки событий
slide54
Структура программыОбзор
  • Организация типов
  • Пространства имён
  • Метод Main
  • Синтаксис
slide55
Структура программыОрганизация типов
  • Физическая организация
    • Типы определяются в файлах
    • Файлы компилируются в модули
    • Модули группируются в сборки

МОДУЛЬ

ФАЙЛ

СБОРКА

ТИП

slide56
Структура программыОрганизация типов
  • Типы определяются в файлах
  • Файл может содержать несколько типов
  • Каждый тип определяется в одном файле
  • Файлы компилируются в модули
  • Модуль это DLL или EXE
  • Модуль может содержать несколько файлов
  • Модули группируются в сборки
  • Сборки могут содержать несколько модулей
  • Часто соотношение модулей и сборок 1:1
slide57
Структура программыПространства имён
  • Пространства имён позволяют определять

уникальные типы

  • Обеспечивают логическую организацию типов
  • Пространство имён может располагаться в

нескольких сборках

  • Пространства имён могут быть вложенными
  • Пространства имён не зависят от файловой

структуры (как в Java)

  • Полное имя типа включает все пространства имён в которые он входит
slide58
Структура программыПространства имён

namespace N1 { // N1

class C1 { // N1.C1

class C2 { // N1.C1.C2

}}

namespace N2 { // N1.N2

class C2 {// N1.N2.C2

}}

}

slide59
Структура программыПространства имён
  • Директива using позволяет использовать

типы без указания полного имени

  • Всегда можно использовать полное имя

using N1;

C1 a; // N1. неявно

N1.C1 b; // полное имя

C2 c; // Ошибка! C2 не определён

N1.N2.C2 d; // Один из классов C2

C1.C2 e; // Другой

slide60
Структура программыПространства имён
  • Директива using также позволяет создавать

Псевдонимы

using C1 = N1.N2.C1;

using N2 = N1.N2;

C1 a; // Ссылка на N1.N2.C1

N2.C1 b; // Ссылка на N1.N2.C1

slide61
Структура программыМетод Main
  • Выполнение начинается со статического

метода Main()

  • Может быть только один метод с одним из

нижеуказанных интерфейсов

  • static void Main()
  • static int Main()
  • static void Main(string[] args)
  • static int Main(string[] args)
slide62
Структура программыСинтаксис
  • Идентификаторы
    • Имена типов, методов, полей, и т.п.
    • Должно быть целое слово – без пробелов
    • Содержит символы Unicode
    • Начинается с буквы или подчёркивания
    • Чувствителен к регистру
    • Не должен совпадать с ключевым словом
    • Кроме имеющих префикс @
slide63
Переменные и константы

Переменные и константы ‘видимы’ от места

Объявления до конца блока

В пределах ‘видимости’ переменной или

константы объявление другой переменной

или константы с тем же именем является

ошибкой

{

int x;

{

int x; // Error: can’t hide variable x

}}

slide64
Переменные
  • Перед использованием переменной ей

следует присвоить значение

  • Автоматическое присвоение значений

используется для статических полей, полей

экземпляров классов и элементов массивов

void Foo() {

string s;

Console.WriteLine(s); // Ошибка

}

slide65
Оператор goto и метки

goto может использоваться для передачи

управления внутри или за пределы блока, но

не во включённый блок

Пример использования:

slide66
static void Find(int value, int[,] values,

out int row, out int col)

{

int i, j;

for (i = 0; i < values.GetLength(0); i++)

for (j = 0; j < values.GetLength(1); j++)

if (values[i, j] == value) goto found;

throw new InvalidOperationException(“Не найдено");

found:

row = i; col = j;

}

switch
Оператор switch
  • Может делать ветвление по любому

предопределенному типу (включая string) и enum

    • Пользовательские типы должны поддерживать неявное преобразование к этим типам
  • Необходимо явно указать как закончить выбор
    • директивой break, goto case, goto label, return,

throw или continue

    • Это устраняет ошибку перехода к следующему выбору
slide68
int Test(string label) {

int result;

switch(label) {

case null:

goto case “runner-up”;

case “fastest”:

case “winner”:

result = 1; break;

case “runner-up”:

result = 2; break;

default:result = 0;

}

return result;}

foreach
Оператор foreach
  • Итерация массивов

public static void Main(string[] args) {

foreach (string s in args)

Console.WriteLine(s);

}

foreach1
Оператор foreach
  • Итерация пользовательских коллекций
  • Создаётся реализацией интерфейса

Ienumerable

foreach (Customer c in customers.OrderBy("name")) {

if (c.Orders.Count != 0) {

...

}

}

slide71
Обработка исключений
  • Исключения это механизм C# для обработки

неожиданно возникающих ошибок

  • Лучше чем возвращаемые значения статуса

операции

    • Их нельзя игнорировать
    • Не нужно обрабатывать их в той точке где онивозникли
    • Могут использоваться даже если нет

возвращаемого значения (например доступ к

свойству)

    • Имеется стандартная обработка исключений
slide72
Обработка исключений

try...catch...finally

  • Блок try содержит код который может

привести к исключению

  • Блок catch обрабатывает исключение
    • Может быть несколько блоков catch для обработкиразных типов исключений
  • Блок finally содержит код который

исполняется всегда

    • Для выхода из блока finally нельзя использоватьдирективы перехода (такие как goto)
slide73
Обработка исключений
  • Директива throw вызывает исключение
  • Исключение представлено экземпляром класса System.Exception или его наследника
    • Содержит информацию о исключении
    • Свойства
      • Message
      • StackTrace
      • InnerException
  • Вы можете повторно вызвать исключение, илиперехватить одно исключение и вызвать другое
slide74
Обработка исключений

try {

Console.WriteLine("try");

throw new Exception(“message”);}

catch (ArgumentNullException e) {

Console.WriteLine(“caught null argument");}

catch {

Console.WriteLine("catch");}

finally {

Console.WriteLine("finally");}

slide75
Синхронизация
  • Многопоточные приложения нуждаются в

синхронизации для обеспечения доступа к

общим данным

  • Необходимо предотвратить повреждение данных
  • Директива lock использует экземпляр

класса для обеспечения взаимоисключения

  • Только одна директива lock может получить

доступ к одному экземпляру

slide76
Синхронизация

public class CheckingAccount {

decimal balance;

public void Deposit(decimal amount) {

lock (this) {

balance += amount;}}

public void Withdraw(decimal amount) {

lock (this) {

balance -= amount;}}

}

using
Директива using
  • C# применяет автоматическое управление

памятью (сборка мусора)

    • Устраняется большинство проблем управленияпамятью
  • Однако, это приводит к неопределённости

при завершении работы

    • Не гарантируется вызываются ли и если

вызываются то когда деструкторы объектов

using1
Директива using
  • Объекты, которые должны быть

деинициализированы после использования должныреализовывать интерфейс System.IDisposable

    • Один метод: Dispose()
  • Директива using позволяет вам создать экземпляркласса, использовать его, и затем быть уверенным втом что метод Dispose вызван при окончанииработы
  • Dispose гарантированно вызывается
slide79
public class MyResource : IDisposable {

public void MyResource() {

// захватываем ресурс}

public void Dispose() {

// освобождаем ресурс}

public void DoSomething() {

…}

}

using (MyResource r = new MyResource()) {

r.DoSomething();

} //вызывается r.Dispose()

slide80
Дополнительные ресурсы
  • http://msdn.microsoft.com
  • http://windows.oreilly.com/news/hejlsberg_0800.html
  • http://www.csharphelp.com/
  • http://www.csharp-station.com/
  • http://www.csharpindex.com/
  • http://msdn.microsoft.com/msdnmag/issues/0900/csharp/csharp.asp
  • http://www.hitmill.com/programming/dotNET/csharp.html
  • http://www.c-sharpcorner.com/
  • http://msdn.microsoft.com/library/default.asp?URL=/libr

ary/dotnet/csspec/vclrfcsharpspec_Start.htm

ad