Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.работа 2a с C# и Java.doc
Скачиваний:
3
Добавлен:
17.08.2019
Размер:
144.9 Кб
Скачать

14

К лабораторной работе 2 по ооп

Часть 1. Делегаты и события в языке с# Делегаты

Создать объект делегата и выполнить его

using System;

// Объявить делегат

delegate void DelF ();

class TestDel

{

void F (){Console.WriteLine ("F");}

static void Main ()

{

// Создать объект типа TestDel

TestDel tD= new TestDel();

// Создать объект dF делегата DelF с функцией F()

DelF dF= new DelF (tD.F);

// Выполнить объект делегата dF

dF();

}

}

Задание

  1. Выполнить приведённую программу с делегатом. Модифицировать её, дополнив класс функциями различных форматов. Создать делегаты для этих функций и выполнить их.

Создать объект делегата, размещённого в классе, и выполнить его

а) инициализировать делегат вне класса

using System;

// Объявить делегат

delegate void DelF ();

class A

{

public DelF delF=null; // Ссылка на делегат

}

class B

{

public void F (){Console.WriteLine ("F");}

static void Main ()

{

B b= new B();

// Выполнить функцию F() класса B

b.F();

// Создать объект a типа A с указанным делегатом

A a= new A();

// Инициализировать делегат a.delF функцией F() класса B

a.delF= new DelF(b.F);

// Выполнить делегат delF класса А

a.delF();

}

}

а) инициализировать делегат внутри класса

using System;

// Объявить делегат

delegate void DelF ();

class A

{

public DelF delF; // Ссылка на делегат

public A()

{ // инициализировать объект делегата

delF= new DelF(this.F);

}

// Функция без параметров

public void F (){Console.WriteLine ("F");}

}

class B

{

static void Main ()

{

A a= new A(); // Создать объект a типа A

// Выполнить делегат delF класса А

a.delF();

}

}

а) передать делегат в класс через конструктор

using System;

// Объявить делегат

delegate void DelF ();

class A

{

public DelF delF=null; // Ссылка на делегат

public A(DelF d)

{ // Добавить в делегат delF делегат

// с ннкапсулированной функцией

delF+= d;

}

}

class B

{

public void F (){Console.WriteLine ("F");}

static void Main ()

{

B b= new B();

DelF dF= new DelF(b.F);

// Создать объект a типа A с указанным делегатом

A a= new A(dF);

// Выполнить делегат delF класса А

a.delF();

}

}

.//////////////

using System;

// Объявить два делегата

delegate int DelRet (int x, int y);

delegate void DelRef (int x, int y, ref int z );

class TestDel

{

static void Main ()

{

TestDel tD= new TestDel(); // Создать объект типа TestDel

// Создать объект делегата DelRet с функцией SumRet

DelRet tRet= new DelRet (tD.SumRet);

// Выполнить объект делегата tRet

Console.WriteLine ("4+5= " + tRet(4, 5));

//DelRet tRet1= new DelRet(tD.SumRef); // Ошибка

// Создать объект делегата DelRef с функцией SumRef

DelRef tRef= new DelRef (tD.SumRef);

// Выполнить объект делегата tRet

int z=0;

tRef (10, 20, ref z);

Console.WriteLine ("10+20= " + z);

// Выполнить функцию UseDel с делегатами DelRet и DelRef

Console.WriteLine ("(11+12)+(100+200)= " + tD.UseDel(tRet, tRef));

}

int SumRet (int a, int b){return a+b;}

void SumRef (int a, int b, ref int c){c= a+b;}

int UseDel (DelRet dR, DelRef dF)

{

int tmp= 0;

dF (11,22, ref tmp);

return tmp+dR (100,200);

}

}