在执行被调用函数之前执行代码

时间:2012-05-01 13:41:50

标签: c#

我希望能够以某种方式标记一个函数(属性可能?),这样当从任何地方调用它时,其他一些代码会处理参数并返回一个值而不是被调用的函数,或者可以让函数正常执行。

我会用它来轻松缓存。

例如,如果我有一个名为Add10的函数,它将如下所示:

int Add10 (int n)
{
    return n + 10;
}

如果使用相同的值(Add10(7))重复调用该函数,它将始终给出相同的结果(17),因此每次重新计算都没有意义。当然,我不会用这么简单的功能来做,但我相信你能理解我的意思。

C#是否提供了我想要的任何方式? 我需要一种方法将函数标记为缓存,以便当有人执行Add10(16)某些代码首先运行以检查字典时,我们已经知道Add10值为16并返回它,如果我们这样做,计算,存储和如果我们不回来。

4 个答案:

答案 0 :(得分:3)

您想要记住该功能。这是一种方式:

http://blogs.msdn.com/b/wesdyer/archive/2007/01/26/function-memoization.aspx

答案 1 :(得分:0)

而不是功能,我会公开Func<> 委托

Func<int, int> add10 = (n) =>
{
    // do some other work
    ...

    int result = Add10(n); // calling actual function

    // do some more perhaps even change result
    ...

    return result;

};

然后:

int res = add10(5); // invoking the delegate rather than calling function

答案 2 :(得分:0)

就像杰森提到的那样,你可能想要像功能记忆这样的东西。

关于它的另一个SO线程: Whose responsibility is it to cache / memoize function results?

您还可以使用与面向方面编程相关的原则来实现此类功能。

http://msdn.microsoft.com/en-us/magazine/gg490353.aspx

Aspect Oriented Programming in C#

答案 3 :(得分:0)

MbCache可能就是你要找的东西。