|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你所列的那些其实差不多都可以称为应用服务器(servlet应该说是一种语言更合适)net网页编程是开放的,相同的工具就会有很多公司在做,加上net网页编程已经发展了很多年了,因此这些工具就很多了。他们很多都是类似的。Lambda表达式是一个匿名的办法,在开辟期我们是不晓得其办法名是甚么的,以是我们要怎样递回挪用呢?
假如你看过我这文章《让您知道您的办法是被何“人”挪用》的话,你应当会“啊哈”的拍一下思想,思绪就出来了,没错!!就是间接用StackFrame猎取以后实行的办法,然后间接Invoke便可。
示例代码:
<br>classTest
<br>
<br>
<br>{
<br>
<br>/**////<summary>
<br>///
<br>///</summary>
<br>///<paramname="v1"></param>
<br>///<paramname="v2"></param>
<br>///<paramname="num"></param>
<br>///<paramname="total"></param>
<br>///<returns></returns>
<br>publicdelegatelongAddMethod(longv1,longv2,intnum,intcout);
<br>
/**////<summary>
<br>///
<br>///</summary>
<br>///<paramname="addMethod"></param>
<br>///<paramname="cout"></param>
<br>staticvoidPrint(AddMethodmethod,intcout)
<br>{
<br>Console.WriteLine(method(0,1,2,cout));
<br>}
<br>
<br>staticvoidMain()
<br>{
<br>//求0,1,1,2,3,5,8
<br>.相似的数据行列在第30个地位的数
<br>Print((v1,v2,num,cout)=>
<br>{
<br>Console.Write(v1);
<br>Console.Write(",");
<br>
<br>num++;
<br>if(num==cout)
<br>{
<br>Console.Write(v2);
<br>Console.WriteLine();
<br>returnv1+v2;
<br>}
<br>else
<br>{
<br>//获得以后办法
<br>StackFrameframe=newStackFrame(0);
<br>//递回挪用
return(long)(frame.GetMethod().Invoke(num,newobject[]
<br>{v2,(v1+v2),num,cout}));
<br>}
<br>},30);
<br>Console.Read();
<br>}
<br>}
我们的代码乐成运转了
<br>,乐成的求出在第30个地位的数值是:514229
当时,.NET里另有一个东东能够便利的失掉以后挪用办法的援用,这东东就是MethodBase,其有一个静态办法GetCurrentMethod可间接猎取以后实行的办法援用,以是我们能够将下面的StackFrame处的两句代码改成以下:
<br>//递回挪用
return(long)(MethodBase.GetCurrentMethod().Invoke(num,newobject[]
<br>{v2,(v1+v2),num,cout}));
来自:http://www.ckuyun.com/kingthy/archive/2008/04/20/1162248.html
实行后的了局都是一样的
<br>(纷歧样才怪了Orz)效率会有不少的变化。而实际上net网页编程是基于堆栈机器来设计,这和我们常见的基于寄存器的本地机器是差异比较大的。总体来说,这是一种虚拟机的设计思路。 |
|