Вход на сайт
делегат с эвентом и без - чем отличаются?
412 просмотров
Перейти к просмотру всей ветки
Программист коренной житель
в ответ Wanderer_ 09.05.17 12:23
Инкапсулации и безопасности :)
Простой пример:
class ClassA { private ClassA () {} private static ClassA classA = null; public static ClassA Instance { get { if (classA != null) classA = new ClassA(); return classA; } } public delegate void AAA (); public AAA OnAAA; } class ClassB { public void Init () { ClassA.Instance.OnAAA += AAA_Fired; } private void AAA_Fired () { MakeAllPeopleHappy (); } } class ClassC { public void Init () { ClassA.Instance.OnAAA = AAA_Fired; } private void AAA_Fired () { MakeAllPeopleRich (); } }
И тут вожможны варианты :)
Если сделать так:
ClassB b = new ClassB (); ClassC c = new ClassC (); c.Init (); b.Init ();
то все люди буду и богатыми и счастливыми, а если сделать так:
ClassB b = new ClassB (); ClassC c = new ClassC (); b.Init (); c.Init ();
то все будут только богатыми :)
А ведь может еще случиться и так:
class ClassEvil { public void Init () { ClassA.Instance.OnAAA = AAA_Fired; ClassA.Instance.OnAAA (); } private void AAA_Fired () { MakeAllPeopleIll (); MakeAllPeoplePoor (); MakeAllPeopleUnhappy (); } }
Так что если ТС не хочет, чтобы ему вырвали руки, то пусть всегда использует event :D