Как слушать абстрактный метод? - PullRequest
5 голосов
/ 19 августа 2011

Могу ли я прослушать абстрактный метод в моем абстрактном классе и вызывать событие при каждом вызове этого метода?Если да, то как?

Ответы [ 3 ]

3 голосов
/ 19 августа 2011

Аннотация или нет, вы ищете здесь платформу Inversion of Control (IoC), в частности такую, которая позволяет перехватывать методы.

Я бы посмотрел на Unity или Spring . Там есть еще несколько человек.

3 голосов
/ 19 августа 2011

Лучший способ сделать это следующим образом:

public abstract class MyClass {

    public void DoOuter() {
        FireEvent();
        DoInner();
    }

    protected abstract void DoInner();
}

Когда кто-то хочет вызвать doInner, он должен вызвать DoOuter(), чтобы выполнить его. Чтобы указать функциональность, вы переопределяете DoInner(). Таким образом, FireEvent() всегда вызывается перед тем, как указывается любая функциональность DoInner() ... если только он не вызывается непосредственно дочерним классом, от которого вы не можете реально защитить.

2 голосов
/ 19 августа 2011

Не совсем так, как абстрактный метод всегда переопределен, и нет никакой гарантии, что переопределение вызовет base.Method() для его реализации.

Лучше всего создать виртуальный метод, который вызывает событие, а затем сделать все ваши вызовы переопределений base.Method()

Если вы хотите перехватить вызов метода, здесь вопрос о том, как это сделать.

...