Делегаты и события - 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("Конец"); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д