Делегаты и события - 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 - правильно ли у меня реализован?? (просто мне не совсем понятно, что такое обработчик)
Листинг программы
  1. public void vChange(int oldValue, int newValue)
  2. {
  3. newValue = oldValue + 3;
  4. }
и обработчик событий onStart,onFinish также:
Листинг программы
  1. public static void startText(string str)
  2. {
  3. Console.WriteLine(str);
  4. }
  5. public static void finishText(string str)
  6. {
  7. Console.WriteLine(str);
  8. }
2) Можете помочь реализовать в тесте проверку метода change()? вот пока что есть:
Листинг программы
  1. public delegate void SimpleDel(string str);
  2. public delegate void ValueChangeDel(int oldValue, int newValue);
  3. class Data1
  4. {
  5. protected int intVal;
  6. public event ValueChangeDel onValueChange;
  7. public Data1() { }
  8. public Data1(int intVal) { this.intVal = intVal; }
  9. public int intV
  10. {
  11. get { return intVal; }
  12. set
  13. {
  14. ValueChangeDel vch = onValueChange;
  15. if (vch != null) { vch(intVal, value); }
  16. intVal = value;
  17. }
  18. }
  19. public void onEvent(int ol,int nw) //метод для запуска события onValueChange
  20. {
  21. if (onValueChange != null) { onValueChange(ol,nw); }
  22. }
  23. public void vChange(int oldValue, int newValue)
  24. {
  25. newValue = oldValue + 3;
  26. }
  27. }
  28. class DataChanger
  29. {
  30. public event SimpleDel onStart, onFinish;
  31. public void onSt(string str) //метод для запуска события onStart
  32. {
  33. if (onStart != null) { onStart(str); }
  34. }
  35. public void onFin(string str) //метод для запуска события onFinish
  36. {
  37. if (onFinish != null) { onFinish(str); }
  38. }
  39. void change(Data1 data, IEnumerable<int> values)
  40. {
  41. foreach (int v in values)
  42. {
  43. data.intV += v;
  44. }
  45. onStart("Start");
  46. onFinish("Finish");
  47. }
  48. public static void startText(string str)
  49. {
  50. Console.WriteLine(str);
  51. }
  52. public static void finishText(string str)
  53. {
  54. Console.WriteLine(str);
  55. }
  56. class Test
  57. {
  58. public static void test()
  59. {
  60. //....
  61. }
  62. }
  63. }

Решение задачи: «Делегаты и события»

textual
Листинг программы
  1. class Program
  2.     {
  3.         public static List<string> History = new List<string>(20);
  4.        
  5.         static void Main(string[] args)
  6.         {
  7.             int[] Values = {5,6,4,58,4,5,4,5,4,5,4,5,4,5}; //значения для увеличения параметра
  8.             Data1 data = new Data1();
  9.             data.onValueChange += new ValueChangeDel(data_onValueChange); //Это назначаются обработчики событий
  10.             DataChanger.onStart +=new SimpleDel(data_onStart);
  11.             DataChanger.onFinish += new SimpleDel(data_onFinish);
  12.             //теперь тестируем ченджер
  13.             DataChanger.change(data, Values);
  14.             foreach (string s in History)
  15.                 Console.WriteLine(s);
  16.             Console.WriteLine();
  17.             Console.ReadLine();
  18.         }
  19.  
  20.         //Обработчик события изменения значения
  21.         public static void data_onValueChange(int oldv,int newv)
  22.         {
  23.             History.Add(String.Format("old value={0}, new value={1}", oldv, newv)); //Ост. строки должны иметь вид "old value= ...,
  24.                                                                                     //new value=...""
  25.         }
  26.  
  27.         //Обработчик события старта
  28.         public static void data_onStart(string s)
  29.         {
  30.             History.Add("Старт с сообщением: " + s);
  31.         }
  32.  
  33.         //Обработчик события финиша
  34.         public static void data_onFinish(string s)
  35.         {
  36.             History.Add("Финиш с сообщением: " + s);
  37.         }
  38.  
  39.  
  40.  
  41.  
  42.         public delegate void SimpleDel(string str);
  43.         public delegate void ValueChangeDel(int oldValue, int newValue);
  44.  
  45.         class Data1
  46.         {
  47.             protected int intVal;
  48.             public event ValueChangeDel onValueChange;
  49.             public Data1() {}
  50.             public Data1(int intVal)
  51.             {
  52.                 this.intVal = intVal;
  53.             }
  54.             public int intV
  55.             {
  56.                 get { return intVal; }
  57.                 set
  58.                 {
  59.                     onValueChange(intVal, value);
  60.                     intVal = value;
  61.                 }
  62.             }
  63.         }
  64.  
  65.         static class DataChanger
  66.         {
  67.             public static event SimpleDel onStart;
  68.             public static event SimpleDel onFinish;
  69.             public static void change(Data1 data,IEnumerable<int> values)
  70.             {
  71.                 onStart("Поехалиии");
  72.                 foreach (int v in values)
  73.                 {
  74.                     data.intV += v;
  75.                 }
  76.                 onFinish("Конец");
  77.             }
  78.         }
  79.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут