首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将事件与方法Load关联?

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

Stack Overflow用户
提问于 2018-06-10 08:27:32
回答 1查看 29关注 0票数 0

我想在每次使用方法Load时进行注册。为了做到这一点,我想使用一个事件,比如如果它被调用,我想增加一个变量。

这个加载是一种从数据库获取数据的方法,目的是知道所做的访问次数。

有人能帮我理解如何创建这样一个事件吗?

方法定义:

代码语言:javascript
复制
protected override V Load(DbDataReader dr)
EN

回答 1

Stack Overflow用户

发布于 2018-06-10 08:49:27

看起来你想做一个事件,为了一个你已经知道的单一目的--计算一个数据库被访问的次数。您可以这样实现它:

代码语言:javascript
复制
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;

这不是线程安全的,但它是一个如何实现您想要的东西的基本示例。但是,如果您正在使用的库已经提供了一个可以重写的虚拟方法,那么您还需要创建一个事件吗?您可以在没有事件的情况下轻松实现相同的功能:

代码语言:javascript
复制
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应该是定义事件的人),但请记住,您并不总是需要使用事件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档