5

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

我会用它来轻松缓存。

例如,如果我有一个名为 Add10 的函数,它看起来像这样:

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

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

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

4

4 回答 4

3

你想记住这个功能。这是一种方法:

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

于 2012-05-01T13:43:46.140 回答
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
于 2012-05-01T13:51:18.007 回答
0

就像 Jason 提到的那样,您可能想要函数 memoization 之类的东西。

这是另一个关于它的SO线程: 缓存/记忆函数结果是谁的责任?

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

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

C# 中的面向切面编程

于 2012-05-01T13:53:04.467 回答
0

MbCache可能是您正在寻找的。

于 2012-06-12T20:57:28.150 回答