Делегаты и события - 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 - правильно ли у меня реализован?? (просто мне не совсем понятно, что такое обработчик)
public void vChange(int oldValue, int newValue)
        {
            newValue = oldValue + 3;
        }
и обработчик событий onStart,onFinish также:
public static void startText(string str)
        {
            Console.WriteLine(str);
        }
        public static void finishText(string str)
        {
            Console.WriteLine(str);
        }
2) Можете помочь реализовать в тесте проверку метода change()? вот пока что есть:
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("Конец");
            }
        }
    }

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


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

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

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