Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 11.03.2016
Сообщений: 23

Использование делегатов и событий при смене поля "телефон" объекта

22.09.2016, 14:51. Показов 758. Ответов 2

Студворк — интернет-сервис помощи студентам
У меня есть некий класс Person, где есть такие поля, как "Имя", "Фамилия", "Телефон". Также в другом классе Database есть методы, которые добавляют объекты класса Person в list, осуществляют поиск по имени, фамилии и телефону, возвращая либо список с подходящими объектами, либо сами объекты.
Вопрос: как с помощью событий и делегатов изменить телефон (phone) найденного объекта? Где прописывать делегат и событие, в каком классе?

Вот как это выглядит в Program:
C#
1
2
3
 
var result = dataBase.SearchByPhone("8956535263"); // осуществление поиска по телефону, result - найденный объект
result.Phone = "8543242234"; //изменение телефона найденного объекта через свойства
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2016, 14:51
Ответы с готовыми решениями:

Использование делегатов при исследовании функции на экстремум
Цель работы: Использование делегатов при исследовании функции на экстремум. Условие: с помощью метода поразрядного приближения найти...

Задачи на использование событий. Осуществить использование событий в программе с применением синтаксиса обработчика, рекомендованного для среды NET Fr
NET Framework. Программа для поиска простых чисел среди чисел Фибоначчи. При нахождении очередного простого числа активировать событие...

Использование интерфейса и делегатов при вычислении силы тока и напряжения по закону Ома
Требуется написать программу с использованием интерфейса и делегатов. Программа должна считать силу тока и напряжение по закону Ома....

2
6 / 6 / 6
Регистрация: 02.01.2013
Сообщений: 32
22.09.2016, 20:26
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
namespace Test
{
    class Program
    {
        static void Main( string[] args )
        {
            //Person person = new Person( "" , "" , "" );
 
            //person.MyEvent += MyMethod;
        }
 
        public void Test()
        {
            Person person = new Person( "" , "" , "" );
 
            person.MyEvent += MyMethod;
        }
        //private void MyMethod( Object sender , EventArgs e ) { }  //1
        private void MyMethod( Object sender , MyParametersEventArgs e ) { Console.WriteLine( "sss" ); }    //2
    }
 
    public class Person
    {
        public String FirstName { get; private set; }
        public String LastName { get; private set; }
 
        private String _phone;
        public String Phone
        {
            get { return _phone; }
            set
            {
                if( _phone != null )
                    //MyEvent( this , EventArgs.Empty );    //1
                    MyEvent( this , new MyParametersEventArgs() );  //2
                _phone = value;
            }
        }
 
        //public event EventHandler MyEvent = delegate ( Object sender , EventArgs e ) { }; //1
        public event EventHandler<MyParametersEventArgs> MyEvent = delegate ( Object sender , MyParametersEventArgs e ) { };    //2
 
        public Person( String firstName , String lastName , String phone )
        {
            FirstName = firstName;
            LastName = lastName;
            Phone = phone;
        }
 
    }
 
    //Если есть данные которые нужно передать, то делай вот так. 
    public class MyParametersEventArgs : EventArgs
    {
        public String FirstName { get; private set; }
        public String LastName { get; private set; }
    }
 
 
 
}
https://habrahabr.ru/post/213809/
http://professorweb.ru/my/csha... 0/10_7.php
Приблизительно так, если в параметры события не входят данные экземпляров то можно сделать событие статическим и подписать на событие нужно будет лишь 1 раз, а не подписывать на событие каждый экземпляр класса Person.

//1 - случай без передачи параметров
//2 - случай с передачей параметров
1
418 / 316 / 241
Регистрация: 29.05.2010
Сообщений: 796
Записей в блоге: 1
22.09.2016, 21:51
karbonid, странная у вас постановка задачи. Если нужно прилепить ВСЕ, то вот пример
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//Rextester.Program.Main is the entry point for your code. Don't change it.
//Compiler version 4.0.30319.17929 for Microsoft (R) .NET Framework 4.5
 
using System;
 
namespace Rextester
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var test=new Test();
            test.ChangeEvent+=(e)=>{
                Console.WriteLine("Элемент с индексом {0} был изменен",e);
            };
            
            var number=3;
            var find=test.Search(number);
            if(find==-1)
            {
                Console.WriteLine("Элемент не найден!");
                return;
            }
            else 
                Console.WriteLine("Элемент имеет индекс {0}",find);
            test.Print();
            
            
            Action<int,int> act=test.Do;
            act(find,777);
            test.Print();
            
           
        }
    }
    
    class Test
    {
        private int[]arr={1,2,3,4,5};
        
        public int Search(int element)
        {
            return Array.IndexOf(arr,element);
        }
        
       public  event Action<int> ChangeEvent;
        
        public void Do(int element,int value)
        {
            if(ChangeEvent!=null)
            {
                arr[element]=value;
                ChangeEvent(element);
            }
        }
        public void Print()
        {
            Console.WriteLine(string.Join(" ",arr));
        }
        
        
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.09.2016, 21:51
Помогаю со студенческими работами здесь

Именование делегатов и событий
Есть такая приставка для делегатов как EventArgs. Иногда используют что-то типо ActionHandler. Вот я хотел бы понять как правильно...

Получения событий без делегатов
Как получить события в C# Console Application без использования делегатов?

Обновление даты при смене другого поля
Всем привет. Есть таблица, как в приложении. Надо чтобы, чтобы при смене вручную статуса (2) выставлялась или обновлялась дата (1) на...

Применение делегатов в качестве обработчиков событий
Реализовать собственное событие (имитация) нажатие клавиш мыши или клавиатуры. Разработать событием на основе стандартного события и...

Разработка делегатов, событий, анонимных методов
1) Объявить делегат. 2) Реализовать функции ввода и вывода элементов одномерного массива. 3) Реализовать функцию замены всех...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru