Как связать событие с методом Load? - PullRequest
0 голосов
/ 10 июня 2018

Я хочу регистрироваться каждый раз, когда используется метод Load.Для этого я хочу использовать Событие, например, если оно вызывается, я хочу увеличить переменную.

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

Может кто-нибудь помочь мне понять, как создать такое событие.

Определение метода:

protected override V Load(DbDataReader dr)

1 Ответ

0 голосов
/ 10 июня 2018

Похоже, что вы хотите создать событие для единственной цели, о которой вы уже знаете - подсчет количества обращений к базе данных.Вы можете реализовать это следующим образом:

public class Foo : TheClassThatDefinesLoad
{
    public event EventHandler Loaded;

    protected override V Load(DbDataReader dr)
    {
        var result = base.Load(dr);

        // An event handler with no listeners is null by default
        if (Loaded != null)
            Loaded.Invoke(this, new EventArgs());

        return result;
    }
}

// Somewhere in the calling code:
int loads = 0;
var foo = new Foo();
foo.Loaded += (sender, args) => loads += 1;

Это не потокобезопасно, но это основной пример того, как достичь того, чего вы хотите.Однако, если используемая вами библиотека уже предоставляет виртуальный метод, который вы можете переопределить, нужно ли вам также создавать событие?Вы можете легко достичь того же самого без события:

public class Foo : TheClassThatDefinesLoad
{
    public int TotalLoads { get; private set; }

    protected override V Load(DbDataReader dr)
    {
        var result = base.Load(dr);
        TotalLoads += 1;
        return result;
    }
}

В этом случае, я думаю, что здесь уместно событие (я также думаю, что TheClassThatDefinesLoad должно быть тем, чтобы определить событие), ноимейте в виду, что вам не всегда нужно использовать события.

...