Использование делегатов и событий при смене поля "телефон" объекта - C#
Формулировка задачи:
У меня есть некий класс
Person
, где есть такие поля, как"Имя"
,"Фамилия"
,"Телефон"
. Также в другом классеDatabase
есть методы, которые добавляют объекты класса Person в list, осуществляют поиск по имени, фамилии и телефону, возвращая либо список с подходящими объектами, либо сами объекты.Вопрос
: как с помощьюсобытий и делегатов
изменитьтелефон (phone)
найденного объекта? Где прописывать делегат и событие, в каком классе? Вот как это выглядит в Program:
var result = dataBase.SearchByPhone("8956535263"); // осуществление поиска по телефону, result - найденный объект
result.Phone = "8543242234"; //изменение телефона найденного объекта через свойстваРешение задачи: «Использование делегатов и событий при смене поля "телефон" объекта»
textual
Листинг программы
//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));
}
}
}