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

时间:2018-06-10 00:27:32

标签: c# events delegates event-listener observers

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

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

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

方法定义:

protected override V Load(DbDataReader dr)

1 个答案:

答案 0 :(得分:0)

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

/bin/sh: -c: line 0: unexpected EOF while looking for matching `''
/bin/sh: -c: line 1: syntax error: unexpected end of file

这不是线程安全的,但它是如何实现您想要的基本示例。但是,如果您使用的库已经提供了可以覆盖的虚拟方法,那么您是否还需要创建一个事件?没有事件,您可以轻松实现相同的目标:

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