在执行被调用函数之前执行代码
我希望能够以某种方式标记一个函数(属性可能?),这样当从任何地方调用它时,其他一些代码会处理参数并返回一个值而不是被调用的函数,或者可以让函数正常执行。
我会用它来轻松缓存。
例如,如果我有一个名为Add10的函数,它将如下所示:
int Add10 (int n) { return n + 10; }
如果使用相同的值重复调用函数(Add10(7)),它将始终给出相同的结果(17),因此每次重新计算都没有意义。 当然,我不会用这么简单的function来做,但我相信你能理解我的意思。
C#是否提供了我想要的任何方式? 我需要一种方法将函数标记为缓存,以便当有人执行Add10(16)某些代码首先运行以检查字典时,我们已经知道Add10值为16并返回它,如果我们这样做,计算,存储和如果我们不回来。
你想记住这个function。 这是一种方式:
http://blogs.msdn.com/b/wesdyer/archive/2007/01/26/function-memoization.aspx
而不是函数,然后我将公开一个Func<>
委托 :
Func 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
就像杰森提到的那样,你可能想要像函数记忆这样的东西。
这是另一个关于它的SO线程: 缓存/记忆function结果的责任是什么?
您还可以使用与面向方面编程相关的原则来实现此类function。
http://msdn.microsoft.com/en-us/magazine/gg490353.aspx
C#中面向方面编程
MbCache可能正是您正在寻找的。
- 页面生命周期 – 使用FindControl引用在页面加载期间以编程方式创建的控件
- 如何使用Windows.Web.Http中的新HttpClient下载图像?
- 如何检查网站浏览器中是否已打开网站?
- OpenXML多张表格
- WCF UserNamePasswordValidator – validation后访问凭据
- 使用LINQ选择随机XML节点
- 模拟DataReader并获取Rhino.Mocks.Exceptions.ExpectationViolationException:IDisposable.Dispose(); 期望#0,实际#1
- 在WPF中运行时调整TextBox的大小
- InvokeMember(“click”)webBrowser帮助