C #: события или интерфейс наблюдателя? За и против? - PullRequest
57 голосов
/ 15 февраля 2009

У меня есть следующее (упрощенно):

interface IFindFilesObserver
{
    void OnFoundFile(FileInfo fileInfo);
    void OnFoundDirectory(DirectoryInfo directoryInfo);
}

class FindFiles
{
    IFindFilesObserver _observer;

    // ...
}

... и я в конфликте. Это в основном то, что я написал бы в C ++, но в C # есть события. Должен ли я изменить код для использования событий или оставить его в покое?

Каковы преимущества или недостатки событий по сравнению с традиционным интерфейсом наблюдателя?

Ответы [ 11 ]

0 голосов
/ 17 марта 2011

Если ваши объекты нужно будет сериализовать каким-либо образом, который сохраняет ссылки, например, с NetDataContractSerializer или, возможно, protobuf события не смогут пересечь границу сериализации. Поскольку шаблон наблюдателя опирается только на ссылки на объекты, он может без проблем работать с этим типом сериализации.

Ex. У вас есть несколько бизнес-объектов, которые двунаправленно ссылаются друг на друга и должны быть переданы веб-службе.

...