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