Вы находитесь на странице: 1из 13

МИНИСТЕРСТВО СВЯЗИ И ИНФОРМАТИЗАЦИИ РЕСПУБЛИКИ

БЕЛАРУСЬ

Учреждение образования

«БЕЛОРУССКАЯ ГОСУДАРСТВЕННАЯ АКАДЕМИЯ СВЯЗИ»

ФАКУЛЬТЕТ ИНЖИНИРИНГА И ТЕХНОЛОГИЙ СВЯЗИ

КАФЕДРА ИНЖИНИРИНГА И ТЕХНОЛОГИЙ СВЯЗИ

Лабораторная работа №15

«Использование событий в С#»

Вариант 7

Выполнил учащийся гр.ТО613 В.П. Паплевка


Руководитель Н.И. Лущик

Минск 2019
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace ConsoleApp7

class Program

interface Deleter

void Delete(List<BookList> l, int index);

class Delet{

public static void Deleter(Deleter d, List <BookList> l, int index)

d.Delete(l, index);

class People : Deleter

string aut;

string name;

ushort year;

virtual public void set()


{

Console.WriteLine("Введите имя автора: ");

aut = Console.ReadLine();

Console.WriteLine("Введите название: ");

name = Console.ReadLine();

year = 1;

while (year < 0 || year > 2019)

Console.WriteLine("Год выпуска: ");

year = vvodus();

virtual public void print()

Console.WriteLine("Сведения о книге:");

Console.WriteLine("Имя автора: " + aut);

Console.WriteLine("Название: " + name);

Console.WriteLine("Год выпуска: " + year);

public void Delete(List<BookList> l, int index)

Console.WriteLine("Удалить книгу");

class BookList : People, Deleter


{

public delegate void BookList Handler(string message);

public event BookList Handler addHandler;

public event BookList Handler deleteHandler;

string aut;

string name;

short mark;

ushort year;

decimal pages;

public int this[int i]

get

Console.WriteLine("get i = " + i);

return i;

public void Delete(List< BookList > st, int index)

st.RemoveAt(index);

if (deleteHandler != null)

deleteHandler($"Книга {this.name} была удалена.");

public override void set()

{
Console.WriteLine("Введите имя автора: ");

aut = Console.ReadLine();

Console.WriteLine("Введите название: ");

name = Console.ReadLine();

course = -1;

while (mark < 1 || mark > 10)

Console.WriteLine("Введите оценку: ");

mark = vvods();

year = 1;

while (year < 0 || year > 2019)

Console.WriteLine("Год выпуска: ");

year = vvodus();

pages = -1;

while (avgMark < 1 )

Console.WriteLine("Количество страниц: ");

pages = vvodD();

if (addHandler != null)

addHandler.Invoke($"Книга {name} была добавлена!!!");

}
public override void print()

Console.WriteLine("Сведения о книге:");

Console.WriteLine("имя: " + aut);

Console.WriteLine("фамилия: " + name);

Console.WriteLine("курс: " + mark);

Console.WriteLine("Дата рождения: " + year);

Console.WriteLine("средний балл: " + pages);

public static void sortByMark(List< BookList > s)

for (int i = 0; i < 3; i++)

for (int j = 0; j < 2; j++)

if (s[j].mark < s[j + 1].mark)

short tmp = s[j].mark;

s[j].mark = s[j + 1].mark;

s[j + 1].mark = tmp;

short temp = s[j].pages;

s[j].pages = s[j + 1].pages;

s[j + 1].pages = temp;

String temperary = s[j].aut;

s[j].aut = s[j + 1].aut;


s[j + 1].aut = temperary;

string tempe = s[j].name;

s[j].name = s[j + 1].name;

s[j + 1].name = tempe;

ushort temper = s[j].year;

s[j].year = s[j + 1].year;

s[j + 1].year = temper;

bool flag = false;

for(int i = 1; i < 3; i++)

if (s[i - 1].Equals(s[i]))

flag = true;

if(flag == true)

Console.WriteLine("Книги с одинаковыми оценками существуют!");

Console.WriteLine(s.GetType());

else

// Console.WriteLine("FALSE");

}
}

public override bool Equals(object obj)

var group = obj as BookList;

return group != null &&

mark == group.mark;

public override int GetHashCode()

return 164379502 + mark.GetHashCode();

private static void Show_Message(string message)

Console.WriteLine(message);

static void Main(string[] args)

List< BookList > st = new List< BookList >();

st.Add(new BookList ());

st.Add(new BookList ());

st.Add(new StudentGroup());

for (int i = 0; i < st.Count; i++)

st[i].addHandler += Show_Message;
st[i].deleteHandler += Show_Message;

foreach (BookList i in st)

i.set();

foreach (BookList i in st)

i.print();

Console.WriteLine();

BookList.sortBymark(st);

Console.WriteLine("Сортировка по оценке: ");

foreach (BookList i in st)

i.print();

Console.Write("Введите номер книги, которую надо удалить:\n");

s:

int index = vvod();

if (index < 0 || index > st.Count)

Console.Write("Error\n");

goto s;

}
else

Delet.Deleter(new BookList (), st, index);

foreach (BookList i in st)

i.print();

Console.WriteLine();

Console.ReadKey();

public static int vvod()

label:

int num;

try

num = int.Parse(Console.ReadLine());

catch (Exception e)

Console.Write("Error\n");

goto label;

return num;
}

public static short vvods()

label:

short num;

try

num = short.Parse(Console.ReadLine());

catch (Exception e)

Console.Write("Error\n");

goto label;

return num;

public static ushort vvodus()

label:

ushort num;

try

num = ushort.Parse(Console.ReadLine());

catch (Exception e)
{

Console.Write("Error\n");

goto label;

return num;

public static Decimal vvodD()

label:

Decimal num;

try

num = Decimal.Parse(Console.ReadLine());

catch (Exception e)

Console.Write("Error\n");

goto label;

return num;

}
Контрольные вопросы:

1. delegate возвращаемый_тип имя(список_параметров);

где:

возвращаемый_тип –тип значения, которое возвращается методами, на

которые будет ссылаться делегат;

имя –имя делегата. С помощью этого имени объявляются делегаты таким самым
образом как объявляются обычные переменные;

список_параметров – параметры, которые необходимы для методов, на которые


будет ссылаться делегат.

2. Делегаты представляют собой объекты, указывающие на метод, и


используется для инкапсуляции методов класса. С помощью делегата можно
вызвать метод, на который делегат ссылается.

3. Выделяют две разновидности лямбда-выражений:

- одиночные лямбда-выражения,

- блочные лямбда-выражения.

4. Объявление события осуществляется с использованием ключевого слова


event на основе ранее объявленного типа делегата

5. Обработчик события – это метод, выполняющий некоторый набор действий, в


случае возникновения события.

Оценить