Считайте, че събитието е интерфейс за обратно извикване, когато интерфейсът има само един метод.
Само закачащи събития, от които се нуждаете
Със събитията трябва да внедрите манипулатори само за събития, които искате да управлявате. В модела на интерфейса на наблюдателя ще трябва да внедрите всички методи в целия интерфейс, включително внедряване на тела на методи за типове известия, които всъщност не ви интересуват. Във вашия пример винаги трябва да внедрите OnFoundDirectory и OnFoundFile, дори ако ви интересува само едно от тези събития.
По-малко поддръжка
Друго добро нещо при събитията е, че можете да добавите ново към конкретен клас, така че да го повиши, и не е нужно да променяте всеки съществуващ наблюдател. Докато, ако искате да добавите нов метод към интерфейс, трябва да обиколите всеки клас, който вече имплементира този интерфейс, и да внедрите новия метод във всички тях. Със събитие обаче трябва само да промените съществуващите класове, които действително искат да направят нещо в отговор на новото събитие, което добавяте.
Моделът е вграден в езика, така че всеки знае как да го използва
Събитията са идиоматични, тъй като когато видите събитие, знаете как да го използвате. С интерфейс за наблюдател хората често прилагат различни начини за регистриране, за да получават известия и да свързват наблюдателя.. със събития обаче, след като се научите как да се регистрирате и използвате такъв (с оператора +=), останалите са всички един и същ.
Професионалисти за интерфейси
Нямам много плюсове за интерфейси. Предполагам, че принуждават някого да внедри всички методи в интерфейса. Но не можете наистина да принудите някого да приложи всички тези методи правилно, така че не мисля, че има голяма стойност в това.
Синтаксис
Някои хора не харесват начина, по който трябва да декларирате тип делегат за всяко събитие. Освен това стандартните манипулатори на събития в .NET framework имат следните параметри: (изпращач на обект, EventArgs args). Тъй като подателят не посочва конкретен тип, трябва да го направите надолу, ако искате да го използвате. Това често е добре на практика, но не изглежда съвсем правилно, защото губите защитата на системата от статичен тип. Но ако внедрите свои собствени събития и не следвате конвенцията на .NET framework за това, можете да използвате правилния тип, така че не е необходимо потенциално преобразуване надолу.
person
Scott Langham
schedule
15.02.2009