【问题标题】:Execute code before the called function is executed在被调用函数执行之前执行代码
【发布时间】:2012-06-13 04:57:28
【问题描述】:

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

我会用它来轻松缓存。

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

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

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

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

【问题讨论】:

标签: c#


【解决方案1】:

你想记住这个函数。这是一种方法:

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

【讨论】:

【解决方案2】:

而不是函数,然后我会公开一个Func<> delegate

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

【讨论】:

    【解决方案3】:

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

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

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

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

    Aspect Oriented Programming in C#

    【讨论】:

      【解决方案4】:

      MbCache 可能就是您要找的。​​p>

      【讨论】:

        猜你喜欢
        • 2016-12-25
        • 2022-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多