Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пак Новакова + / ДелегатыЧ11СоловьёвЯрославцева

.docx
Скачиваний:
40
Добавлен:
03.06.2014
Размер:
77.32 Кб
Скачать

МИНОБР НАУКИ РОССИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» им. В. И.УЛЬЯНОВА (ЛЕНИНА)»

(СПбГЭТУ)

ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И ИНФОРМАТИКИ

КАФЕДРА СИСТЕМ АВТОМАТИЗИРОВАННОГО ПРОЕКТИРОВАНИЯ

кафедра САПР

Лабораторные работы

По дисциплине «Паттерны проектирования приложений»

Раздел: Углублённое изучение ООП

Выполнили:

Соловьёв С.П.

Ярославцева В.А.

гр. 9301

Преподаватель

Новакова Н.Е.

Санкт-Петербург

2012

Часть 1-1.

Создание и использование делегатов

Цель работы: В данной лабораторной работе будем использовать MS VisualStudio 2010. Необходимо познакомиться с использованием делегатов.

Упражнение 1. В этом упражнении необходимо явно объявить делегат, реализовать его и использовать.

Формализация задачи

Рисунок 1

class Program

Метод

Возвращаемый тип

Модификатор доступа

Входные параметры

Выходные параметры

Назначение

main

Void

Private

-

-

Точка входа в программу

DoSomething

void

private

Log log

-

имитирует операцию, требующую журналирования

LogToFile

Void

private

string message

-

выводит переданное ему в качестве параметра сообщение в текстовый файл

Листинг

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace @delegate

{

class Program

{

private delegate void Log(string message);

static void Main(string[] args)

{

DoSomething(LogToFile);

Console.ReadKey();

}

static void DoSomething(Log log)

{

log(DateTime.Now + ": log message");

}

static void LogToFile(string message)

{

string myDocsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

string logFilePath = Path.Combine(myDocsPath, "log.txt");

File.AppendAllText(logFilePath, message + Environment.NewLine);

}

}

}

Результат работы программы:

Рисунок 2

Вывод: в упражнении 1 были получено первое представление о делегатах. Требовалось объявить делегат, реализовать и использовать. Представлен листинг программы и скриншот результата.

Упражнение 2.

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

Формализация задачи

Рисунок 3

class BankAccount

Метод

Возвращаемый тип

Модификатор доступа

Входные параметры

Выходные параметры

Назначение

Main

Void

private

-

-

Точка входа в программу

DoSomething

void

private

Log log

-

имитирует операцию, требующую журналирования

LogToFile

Void

private

string message

-

выводит переданное ему в качестве параметра сообщение в текстовый файл

Листинг

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace delegate2

{

class Program

{

private delegate void Log(string message);

static void Main(string[] args)

{

DoSomething(LogToFile);

DoSomething(delegate(string message) { Console.WriteLine(message); });

DoSomething(message => Console.WriteLine(message));

DoSomething(Console.WriteLine);

Console.ReadKey();

}

static void DoSomething(Log log)

{

log(DateTime.Now + ": log message");

}

static void LogToFile(string message)

{

string myDocsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

string logFilePath = Path.Combine(myDocsPath, "log2.txt");

File.AppendAllText(logFilePath, message + Environment.NewLine);

}

}

}

Результат работы программы

Рисунок 4

Рисунок 5

Вывод: научились использовать делегат, выводящий сообщение на консоль.

При этом использовался анонимный делегат (т.е. делегат, который не имел имени)

Упражнение 3.

В этом упражнении необходимо изменить делегат Log более общим типом Action<T>.

Формализация задачи

Рисунок 6

class BankAccount

Метод

Возвращаемый тип

Модификатор доступа

Входные пар-ры

Выходные пар-ры

Назначение

Main

Void

Private

-

-

Точка входа в программу

DoSomething

void

Private

Action<string> log

-

имитирует операцию, требующую журналирования

LogToFile

Void

Private

string message

-

выводит переданное ему в качестве параметра сообщение в текстовый файл

Листинг

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

namespace delegate2

{

class Program

{

private delegate void Log(string message);

static void Main(string[] args)

{

//DoSomething(LogToFile);

DoSomething(delegate(string message) { Console.WriteLine(message); });

DoSomething(message => Console.WriteLine(message));

DoSomething(Console.WriteLine);

Console.ReadKey();

}

static void DoSomething(Action<string> log)

{

log(DateTime.Now + ": DoSomething()");

}

static void LogToFile(string message)

{

string myDocsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

string logFilePath = Path.Combine(myDocsPath, "log3.txt");

File.AppendAllText(logFilePath, message + Environment.NewLine);

}

}

}

Результат работы программы

Рисунок 7. Результат упражнения 3

Выводы

В данной лабораторной работе мы познакомились с делегатами. Было выполнено 3 упражнения на основные принципы «делегирования». Для каждого упражнения представлены формализация задачи, листинг программы и скриншот результата.