Делегаты и события - C# (206505)
Формулировка задачи:
Здравствуйте! Помогите пожалуйста с задачей:
Есть два делегата:
delegate void SimpleDel(string str);
delegate void ValueChangeDel(int oldValue, int newValue);
В классе Data1 есть поле protected int intVal и делегат ValueChangeDel, который используется для определения события onValueChange.
В классе DataChanger делегат SimpleDel используется для определения событий onStart,onFinish; в методе void change(...) к значению data последовательно добавляются величины из коллекции values и здесь же генерируются события onStart,onFinish.
В тесте создать Data1 data, Ienumerable<int> values. Проверить работу метода change() (из класса DataChanger). Для этого использовать обработчики для создания истории изменения значения объекта data. Историю изменения хранить в виде Ienumerable<string>. Первая строка истории - "start", последняя - "finish". Ост. строки должны иметь вид "old value= ..., new value=...""
1) обработчик события onValueChange - правильно ли у меня реализован?? (просто мне не совсем понятно, что такое обработчик)
и обработчик событий onStart,onFinish также:
2) Можете помочь реализовать в тесте проверку метода change()?
вот пока что есть:
public void vChange(int oldValue, int newValue)
{
newValue = oldValue + 3;
}public static void startText(string str)
{
Console.WriteLine(str);
}
public static void finishText(string str)
{
Console.WriteLine(str);
}public delegate void SimpleDel(string str);
public delegate void ValueChangeDel(int oldValue, int newValue);
class Data1
{
protected int intVal;
public event ValueChangeDel onValueChange;
public Data1() { }
public Data1(int intVal) { this.intVal = intVal; }
public int intV
{
get { return intVal; }
set
{
ValueChangeDel vch = onValueChange;
if (vch != null) { vch(intVal, value); }
intVal = value;
}
}
public void onEvent(int ol,int nw) //метод для запуска события onValueChange
{
if (onValueChange != null) { onValueChange(ol,nw); }
}
public void vChange(int oldValue, int newValue)
{
newValue = oldValue + 3;
}
}
class DataChanger
{
public event SimpleDel onStart, onFinish;
public void onSt(string str) //метод для запуска события onStart
{
if (onStart != null) { onStart(str); }
}
public void onFin(string str) //метод для запуска события onFinish
{
if (onFinish != null) { onFinish(str); }
}
void change(Data1 data, IEnumerable<int> values)
{
foreach (int v in values)
{
data.intV += v;
}
onStart("Start");
onFinish("Finish");
}
public static void startText(string str)
{
Console.WriteLine(str);
}
public static void finishText(string str)
{
Console.WriteLine(str);
}
class Test
{
public static void test()
{
//....
}
}
}Решение задачи: «Делегаты и события»
textual
Листинг программы
class Program
{
public static List<string> History = new List<string>(20);
static void Main(string[] args)
{
int[] Values = {5,6,4,58,4,5,4,5,4,5,4,5,4,5}; //значения для увеличения параметра
Data1 data = new Data1();
data.onValueChange += new ValueChangeDel(data_onValueChange); //Это назначаются обработчики событий
DataChanger.onStart +=new SimpleDel(data_onStart);
DataChanger.onFinish += new SimpleDel(data_onFinish);
//теперь тестируем ченджер
DataChanger.change(data, Values);
foreach (string s in History)
Console.WriteLine(s);
Console.WriteLine();
Console.ReadLine();
}
//Обработчик события изменения значения
public static void data_onValueChange(int oldv,int newv)
{
History.Add(String.Format("old value={0}, new value={1}", oldv, newv)); //Ост. строки должны иметь вид "old value= ...,
//new value=...""
}
//Обработчик события старта
public static void data_onStart(string s)
{
History.Add("Старт с сообщением: " + s);
}
//Обработчик события финиша
public static void data_onFinish(string s)
{
History.Add("Финиш с сообщением: " + s);
}
public delegate void SimpleDel(string str);
public delegate void ValueChangeDel(int oldValue, int newValue);
class Data1
{
protected int intVal;
public event ValueChangeDel onValueChange;
public Data1() {}
public Data1(int intVal)
{
this.intVal = intVal;
}
public int intV
{
get { return intVal; }
set
{
onValueChange(intVal, value);
intVal = value;
}
}
}
static class DataChanger
{
public static event SimpleDel onStart;
public static event SimpleDel onFinish;
public static void change(Data1 data,IEnumerable<int> values)
{
onStart("Поехалиии");
foreach (int v in values)
{
data.intV += v;
}
onFinish("Конец");
}
}
}