Пак Новакова + / ДелегатыЧ11СоловьёвЯрославцева
.docxМИНОБР НАУКИ РОССИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» им. В. И.УЛЬЯНОВА (ЛЕНИНА)»
(СПбГЭТУ)
ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И ИНФОРМАТИКИ
КАФЕДРА СИСТЕМ АВТОМАТИЗИРОВАННОГО ПРОЕКТИРОВАНИЯ
кафедра САПР
Лабораторные работы
По дисциплине «Паттерны проектирования приложений»
Раздел: Углублённое изучение ООП
Выполнили:
Соловьёв С.П.
Ярославцева В.А.
гр. 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 упражнения на основные принципы «делегирования». Для каждого упражнения представлены формализация задачи, листинг программы и скриншот результата.