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

本文关键字:执行 代码 函数 调用 | 更新日期: 2023-09-27 18:32:52

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

我会用它来轻松缓存。

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

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

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

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

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

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

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

而不是函数,那么我将公开一个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

就像Jason提到的,你可能想要类似函数记忆的东西。

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

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

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

C# 中面向方面的编程

MbCache可能是你要找的。