C #: Есть ли причины, по которым вы не должны объявлять защищенное поле поддержки события? - PullRequest
1 голос
/ 15 июля 2009

Есть ли причина, по которой вы не должны объявлять защищенное поле поддержки события? Например, чтобы избежать необходимости создавать методы OnSomeEvent для всех ваших событий. Например, как это:

    protected SomeEventHandler someEvent;

    readonly object someEventLock = new object();

    public event SomeEventHandler SomeEvent
    {
        add
        {
            lock (someEventLock)
                someEvent += value;
        }
        remove
        {
            lock (someEventLock)
                someEvent -= value;
        }
    }

Конечно, уходящие классы должны помнить о блокировке при поднятии события и т. Д., Но все равно.

Какие-либо причины, почему это не должно быть сделано?

1 Ответ

6 голосов
/ 15 июля 2009

Инкапсуляция. Это именно то, что вы делаете для того, чтобы подклассы должны были помнить о блокировке - это также означает выставление поля блокировки и т. Д. Это детали реализации, которые должны быть инкапсулированы классом.

Создание метода OnSomeEvent означает, что подклассам не нужно знать подробности того, как вы справляетесь с событием - у них просто есть способ его поднять. Это также уменьшает дублирование кода: есть один способ вызвать событие, вместо того, чтобы использовать этот код повсюду.

Я предпочитаю все мои поля как частные, если они не являются открытыми статическими полями только для чтения неизменяемых типов (например, string.Empty) - и даже тогда я склонен отдавать предпочтение свойствам .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...