close

Вход

Забыли?

вход по аккаунту

код для вставкиСкачать
11.05.2014
Программирование
(структурное, процедурное,
объектно-ориентированное)
с использованием C++/C#
Полевой Дмитрий Валерьевич
к.т.н., доцент КиК
e-mail: [email protected]
1
11.05.2014
Перечисление (enum)
• enum – ключевое слово
• экземпляр System.Enum
• множество именованных целочисленных
значений
• при компиляции заменяется на литералы
– осторожно приводить и всегда проверять
• код в пользовательских терминах
• контроль множеств значений
07.05.2014
2
2
11.05.2014
Перечисление (пример)
enum State
{
Off = -1,
Undefined = 0,
On
};
State curState = State.Off;
07.05.2014
3
3
11.05.2014
Хранение значений перечислений
• Int32 – умолчательно
• возможно хранение в виде
–
–
–
–
Byte, SByte
UInt16, Int16
UInt32, Int32
UInt64, Int64
пример:
enum State : SByte {
Off, Undefined, On};
07.05.2014
4
4
11.05.2014
Перечисление (System.Enum)
• (T)0 – умолчательное значение
• GetName
– получить имя для значения
• GetNames
– получить массив имен членов
• GetValues
– получить массив значений членов
07.05.2014
5
5
11.05.2014
Перечисление (System.Enum)
• IsDefined
– проверить значение на вхождение в Enum
• HasFlag
– проверить состояние битов
• TryParse
• ToString
…
07.05.2014
6
6
11.05.2014
Перечисления как флаги
• атрибут [Flags]
пример:
[Flags]
enum State {
None = 0, On = 1 << 0,
Off = 1 << 1, Ready = 1 << 2};
State st = State.On | State.Ready;
07.05.2014
7
7
11.05.2014
Перечисления (рекомендации)
• изучить документацию и «best practices»
• использовать умеренно
• контролировать значения
07.05.2014
8
8
11.05.2014
Делегат
delegate RetType Name(“args”);
• ссылочный тип или экземпляр такого типа
• инкапсуляция метода
• создается путем связывания с
– именованным методом
– анонимным методом
• для вызова метода используются скобки ()
07.05.2014
9
9
11.05.2014
Делегат (пример)
static Int32 sum(Int32 lhs, Int32 rhs)
{
…
}
delegate Int32 IntOp(Int32 lhs, Int32 rhs);
IntOp sum = new IntOp(sum);
07.05.2014
10
10
11.05.2014
Зачем нужны делегаты
• типобезопасное хранение и передача
информации о вызове методов
• управление исполнением вызова методов в
процессе исполнения программы
• повышение гибкости
– внесение изменений (за счет обобщения)
– динамическое управление (логика исполнения)
07.05.2014
11
11
11.05.2014
Анонимный метод
•
•
•
•
delegate
создание делегата без создания метода
блок анонимного метода ограничивает тело
может быть преобразован в делегаты с
различными сигнатурами
• использовать лямбда-выражения
07.05.2014
12
12
11.05.2014
Анонимный метод
• локальные переменные и параметры,
область действия которых содержит
объявление анонимного метода,
называются внешними переменными
анонимного метода
• параметры анонимного метода локальны в
его блоке
• избегать управляющих инструкций
– break, continue, goto
07.05.2014
13
13
11.05.2014
Анонимный метод (пример)
Printer p = delegate(string j) {
System.Console.WriteLine(j);
};
…
p(“Call anonymous method.”);
07.05.2014
14
14
11.05.2014
Вариативность типов в делегатах
• сопоставлении сигнатур методов с типами
делегатов
• ковариация
– возвращают производные типы
• контравариация
– принимают родительских типов
• ref и out параметры не допускают
вариативность
07.05.2014
15
15
11.05.2014
Делегаты (что дальше)
•
•
•
•
•
•
комбинирование делегатов
события
замыкания и лямбда-функции
делегаты и шаблоны
делегаты и интерфейсы
…
07.05.2014
16
16
11.05.2014
Делегаты (что дальше)
читайте книги и статьи ☺ (лучше в оригинале)
Рихтер Д. CLR via C#
http://habrahabr.ru/post/198694/
07.05.2014
17
17
11.05.2014
«Закрытие» (sealed)
• модификатор
• запрет наследования для классов
• запрет переопределения для виртуальных
методов
• рекомендуется использовать всегда, если
явно не планируется наследование
07.05.2014
18
18
11.05.2014
Неявный тип (var)
• для локальных переменных в методах
• тип строго контролируется
• тип выводится компилятором
пример:
var i = 10; // implicitly typed
Int32 i = 10; // explicitly typed
07.05.2014
19
19
11.05.2014
Неявный тип (примеры)
var parts = s.Split(‘-’);
foreach (var v in collection)
{
…
}
07.05.2014
20
20
11.05.2014
Неявный тип (рекомендации)
• избегать злоупотребления
• использовать для улучшения
«читабельности»
• использовать «говорящие» имен
07.05.2014
21
21
11.05.2014
Свойство
• член
• реализует доступ
– чтение (get)
– запись (set)
– вычисления и проверки
• скрывает реализацию
– хранение, проверка
• применимы модификаторы доступа
07.05.2014
22
22
11.05.2014
Свойство (ключевые слова)
• get
– метод чтения
• set
– метод записи
• value
– ссылка на присваиваемое значение внутри
реализации метода записи (параметр)
07.05.2014
23
23
11.05.2014
Свойство (пример)
class TimePeriod
{
public double Hours
{
get { return seconds / 3600; }
set { seconds = value * 3600; }
}
private double seconds;
};
07.05.2014
24
24
11.05.2014
Свойство (пример использования)
TimePeriod p = new TimePeriod;
p.Hours = 0.5;
Console.Write(“{0}”, p.Hours);
07.05.2014
25
25
11.05.2014
Автоматическое свойство
• реализует простую логику доступа к члену
• код доступа генерируется автоматически
• сокращается объем кода
07.05.2014
26
26
11.05.2014
Автоматическое свойство (пример)
class TimePeriodH
{
public double Hours { get; set; }
};
07.05.2014
27
27
11.05.2014
Управление доступом (пример)
class Contact {
public String Name { get;
private set; }
public Contact(String contactName)
{
Name = contactName;
}
}
07.05.2014
28
28
11.05.2014
Параметры командной строки
• параметры – текст
• передаются ОС в момент запуска
приложения
• доступны из приложения
07.05.2014
29
29
11.05.2014
Как получить параметры
• написать «точку входа» правильного
вида
Main(string[] args)
07.05.2014
30
30
11.05.2014
Как задать параметры в IDE
07.05.2014
31
31
11.05.2014
Версии программы/сборки
• Debug
– отладочная
– медленнее
– объемнее
• Release
– продуктовая
– оптимизирована (компактнее и/или быстрее)
07.05.2014
32
32
1/--страниц
Пожаловаться на содержимое документа