Loading...
Hristo_Penchev avatar Hristo_Penchev 389 Точки

[Homework] OOP - Delegates and Events - Problem {3) Student Class - как да засечем промяна в класа?

Гледах лекцията на Наков за евентите и разбрах много малко. Обяснението му беше "Евентите правят това и това, няма да ви обяснявам как се пишат..." И в домашното да напишем евенти. То хубаво самообучение ама...
Както и да е, гледам в момента един линк от презентацията:
http://msdn.microsoft.com/en-us/library/aa645739(v=vs.71).aspx

И проблемът е, че разбирам много малко. Основният ми проблем е, че не схващам къде точно програмата разбира, че има промяна в пропъртито на класа? Как го хендълва горе-долу схванах. Да караме по ред проблемните части от кода:

public delegate void ChangedEventHandler(object sender, EventArgs e); - тук декларираме делегат. Макар че тези (object sender, EventArgs e) така и не мога да ги разбера какво представляват и как се ползват.
public event ChangedEventHandler Changed; - тук присвояваме делегата към евента Changed.

protected virtual void OnChanged(EventArgs e) 
      {
         if (Changed != null)
            Changed(this, e);
      } - Това си нямам и идея какво е. Нито какво прави. 

Виждам, че го викаме по-надолу при определени обстоятелства:
public override int Add(object value) 
      {
         int i = base.Add(value);
         OnChanged(EventArgs.Empty); - явно това променя по някакъв начин стойността на EventArgs (каквото и да е това) и вика метода
         return i;
      }

Та не мога да разбера - как да накарам класа да зацепи, че има промени в пропъртитата и да извикам хендлъра? Като цяло смятам, че темата не е обяснена достатъчно добре и ясно. А дори не знам какво да търся в нета. Информацията е на прекалено високо ниво, за да я разбера.

Тагове:
-4
C# OOP Basics
vladislav_hadzhiyski avatar vladislav_hadzhiyski 66 Точки

Ето един по- интересен начин за решение на задачата.

class Program
{
    static void Test()
    {
        dynamic employee = new ExpandoObject();
        ((INotifyPropertyChanged)employee).PropertyChanged +=
            new PropertyChangedEventHandler(HandlePropertyChanges);
        employee.Name = "John Smith";
    }

    private static void HandlePropertyChanges(
        object sender, PropertyChangedEventArgs e)
    {
        Console.WriteLine("{0} has changed.", e.PropertyName);
    }
}
Source: MSDN
0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.