Похоже, что вы хотите создать событие для единственной цели, о которой вы уже знаете - подсчет количества обращений к базе данных.Вы можете реализовать это следующим образом:
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
должно быть тем, чтобы определить событие), ноимейте в виду, что вам не всегда нужно использовать события.