如何将事件与方法Load相关联?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (34)

我想在每次使用Load方法时注册。要做到这一点,我想使用一个事件,就像它被称为我想增加一个变量。

此Load是一种从数据库获取数据的方法,关键是要知道所进行的访问次数。

有人可以帮助我了解如何创建这样的事件。

方法定义:

protected override V Load(DbDataReader dr)
提问于
用户回答回答于

您似乎想要创建一个事件,仅出于您已经知道的单一目的 - 计算访问数据库的次数。你可以这样实现它:

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应该是定义事件的事件),但请记住,您并不总是需要使用事件。

扫码关注云+社区

领取腾讯云代金券