c#中的委托和c++中的bind/function对比

在c++中,如果要实现这样一个功能,比如定时器,在指定的时间执行指定的函数,接口可以采用如下的设计

uint64_t addtimer(uint64_t t, std::function<void(uint64_t)>);

在实现上可以采用如下的方式

std::map<uint64_t, std::function<void(uint64_t)> > _timetimer;

这样即可将需要在将来执行的函数保存在一个map中,然后在时间到达之后调用。
用户使用这样的一组接口的方式可以是

void testtime(uint64_t tick)
{
    //do anything
}

addtimer(time, testtime);

而在c#中实现相同的功能则采用的是委托

public delegate void tickHandle(Int64 tick);

public void addticktime(Int64 process, tickHandle handle)
{
        tickHandledict.Add(process, handle);
}

private Dictionary<Int64, tickHandle> tickHandledict;

用户调用时,采用如下代码即可

class test
{
    public void ontime(Int64 tick)
    {
        //do anything
    }
}

test _test = new test();
addticktime(time, _test.ontime);

abelkhan技术论坛:http://abelkhan.com/forum.php

posted @ 2016-07-02 14:08  芊芊水  阅读(261)  评论(0编辑  收藏  举报