Курс. NETОрг. вопросы Просьба тем кто не прислал


Курс .NET

Орг. вопросы Просьба тем кто не прислал входное задание в течении недели сделать его След. Занятие – 25 числа Включить камеру

Д.З. Срок – после лекции про SVN Создать консольное приложение для ввода данных о каких-либо объектах. Сохранить информацию о них на диск. Загрузить информацию с диска. Если заданного файла нет – то загрузить из ресурсов. Варианты сохранения и загрузки – через потоки и через LINQ to XML (одновременно). Если файлы отличаются по содержимому при загрузке, вывести соответствующее сообщение и различие между файлами. Создать тесты для всего этого

Хорошая книга CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C# Рихтер Дж.

Хорошая книга Догнать зайца. Как лидеры рынка выигрывают в конкурентной борьбе и как великие компании могут их настичь Стивен Спир Описывается методология Кайдзен

Поток Поток – массив байт Ресурсоемкий и блокирующий ресурс Есть 3 основных варианта работы с потоками Получение всех строк, которые в потоке Получение всего содержимого потока в виде массива байт Поэлементная обработка потока данных

Получение данных потока в виде массива байт Суть решения – у потока есть свойство Length, которое показывает его размер И есть методы для чтения и записи

Проблема освобождения потока Использование using – стандартный ход

Получение строк из потока getFileContentInStringArray

Сериализация объекта в массив байт и обратно Частая задача (вернее часто возникающий костыль) – необходимо очень по быстрому преобразовать объект в массив байт и обратно. Ручками. Суть решения – использования MemoryStream и сериализации. Нормальное решение – преобразование в XML и обратно

Embedded Resource

Суть проблемы Часто надо включить в программу не код – например скрипты обновления БД, эталонное содержимое пустого файла данных, шаблон документа и т.д. Однако это не компилируемые объекты, поэтому один из вариантов – хранить рядом с библиотекой. Минус – все люди ошибаются, потеряют или изменяют файл (особенно пользователи) Решение – использовать Embedded Resource

Как его использовать Включить нужный файл в проект В Build Action выбрать Embedded Resource Получить Embedded Resource в программе во время выполнения

LINQ to XML

Технологии работы с XML XDom Жуть Основной недостаток – нет независимости между элементами. Т.е. вы не можете создать элемент без создания документа. Второй недостаток (для программиста) – очень плохая перегрузка преобразования в стороку LINQ to XML Счастье (появилось в .NET 3 и выше) Компоненты независимы друг от друга Очень хорошая перегрузка преобразования в строку – собственно сам XML

Задача: Продемонстрировать работу с LINQ to XML XDocument XAttribute XElement XComment Есть список студентов в файле, который сделан в Excel. Надо преобразовать его в XML, удалить тех, которые встречаются дважды. Отсортировать по алфавиту и записать результат в виде XML в выходной файл

Главная проблема– файл Excel, загрузка данных Решение 1 – добавить сервер автоматизации, открыть файл, открыть нужный лист, получить количество ячеек с данными, считать их.

Главная проблема – файл Excel, загрузка данных Главное решение проблемы – презумпция «невиновности» программиста. Использование cvs – потому что он тоже поддерживается Excel. И если мы берем его формально мы выполняем требования что из Excel. Если заказчик настаивает – «пугаем» его необходимостью установки Excel (и следовательно платного Office) на все машины, где есть программа

Главная проблема - Microsoft В Office 2007 csv формат разделяется запятой В Office 2010 csv формат разделяется точкой с запятой

Задача: добавить файл в csproj ручками Суть csproj на самом деле простая – это XML, только с пространством имен

Тесты

Аксессоры доступа Суть проблемы – есть инкапсуляция. Следовательно, надо все «внутренности» объявлять с аксессором private. Но если public функция состоит из вызовов простых функций, то эти простые функции желательно тоже протестировать. Но у внутренних функций аксессор доступа – private. Программист сам пишет тесты, поэтому знает название и аргументы. Решение «в лоб» - вызвать её через рефлексию.

Минусы такого подхода Необходимо помнить о кучке флагов BindingFlags Название метода – строка, поэтому изменение названия метода представляет из себя мелкую проблему Параметры метода – массив объектов, поэтому изменение параметров метода так же представляет из себя мелкую проблему Изменение аксессора доступа – мелкая проблема, надо перечислять флаги var flags = BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public; Результат – кучка мелких проблем Хочется счастья, при этом не хочется делать много лишних действий

Счастье Использование условной компиляции + создание новой конфигурации Переходим в ConfigurationManager Выбираем новую конфигурацию

Счастье (продолжение) Создаем новую конфигурацию на основании Debug

И еще немного счастья В свойствах проекта в Test конфигурации, на закладке Build, надо добавить символьную константу TEST

Функция приобретает следующий вид: #if (TEST) public #else private #endif int getMax(int a, int b) { return Math.Max(a, b); }

Все тесты обрамляем в условную компиляцию В прилагаемой директории - Пример суммирование целых чисел, условная компиляция

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

Задача: сделать то, что невозможно без рефлексии Задача: необходимо изменить readonly поле не в конструкторе и не при объвялении. Следствие: readonly с точки зрения выполняемого кода ничем не отличается от обычного

Задача: сделать логирование необходимых полей Задача: у нас приходит объект. Надо записать в лог все его свойства за исключением некоторых. Эти некоторые свойства помечены специальным атрибутом. У некоторых свойств будет специальный атрибут, который будет указывать имя, которое должно быть записано в лог.

all_2013_06_18.ppt
- Количество слайдов: 31