Запись урока: Часть 1 [vk]http://vk.com/video_ext.php?oid=-66674957&id=167885989&hash=05201124f4ff1c84&hd=3[/vk]
Часть 2 [vk]http://vk.com/video_ext.php?oid=-66674957&id=167885995&hash=c70bf43c89e43ea0&hd=3[/vk]
Темы занятия:1. Контроль версий при помощи TortoiseHg.
2. Отличие фундаментальных (int, double и т.д.) типов данных от нефундаментальных (DateTime, TimeSpan). Работа с датой-временем (см. справочник C# 
DateTime и 
TimeSpan).
3. Массивы: цель использования, инициализация (стр. 178 Шилдта или см. справочник C# 
"массивы").
4. Контейнеры list<>: принцип работы, отличие от массивов (см. справочник C# 
List<>).
5. Работа с файлами (FileStream - стр. 441, StreamReader - стр. 451, или см. доп. файл во вложениях).
6. Создание пользовательского класса.
7. Методы (стр. 155 Шилдта), конструкторы (стр. 166 Шилдта) и свойства класса (стр. 313 Шилдта) (либо по классам см. доп. файл во вложениях).
Домашнее задание:1. Модифицировать метод SmaIndicator.Add() таким образом, чтобы избавиться от цикла при подсчёте.
2. Изробразить любым доступным способом иерархию классов:
- List, Set, Dictionary, 
 
- SortedList, SortedSet, SortedDictionary,
 
- LinkedList, Queue, Stack, HashSet
3. Прочитать в книге главу, посвящённую классам (глава 6).
Полезные материалы:1. 
Исключения.2. Оператор цикла foreach - стр. 139 Шилдта
Решение домашней задачи:Код
public void Add(decimal newValue)
        {
            // 1. Получить старое значение суммы
            decimal sum = Value * _buffer.Count;
            // 2. Добавить в неё новое значение (+ в буфер)
            sum += newValue;
            _buffer.Enqueue(newValue);
            // 3. Вычесть самое старое значение (- из буфера), если надо
            if (_buffer.Count > Length)
                sum -= _buffer.Dequeue();
            // 4. Получить новое среднее
            Value = sum / _buffer.Count;
            // (sum*Len+x-y)/Len => sum + (x-y)/Len
        }