CLR中匿名函数实现原理浅析

C#2.0中提供了通过delegate实现匿名函数功能,能有效地减少用户的薄记代码工作,例如

...
button1.Click += new EventHandler(button1_Click);
...
void button1_Click(Object sender, EventArgs e) {
// Do something, the button was clicked...
}
...

可以被简化为直接使用匿名函数构造,如

...
button1.Click += delegate(Object sender, EventArgs e) {
// Do something, the button was clicked...
}
...

关于匿名函数的使用方法可以参考JeffreyRichter的WorkingwithDelegatesMadeEasierwithC#2.0一文。简要说来就是C#编译器自动将匿名函数代码转移到一个自动命名函数中,将原来需要用户手工完成的工作自动完成。例如构造一个私有静态函数,如

以下为引用:

class AClass {
static void CallbackWithoutNewingADelegateObject() {
ThreadPool.QueueUserWorkItem(delegate(Object obj) { Console.WriteLine(obj); }, 5);
}
}

被编译器自动转换为

以下为引用:

class AClass {
static void CallbackWithoutNewingADelegateObject() {
ThreadPool.QueueUserWorkItem(new WaitCallback(__AnonymousMethod$00000002), 5);
}
private static void __AnonymousMethod$00000002(Object obj) {
Console.WriteLine(obj);
}
}

时间: 2024-10-30 01:05:47

CLR中匿名函数实现原理浅析的相关文章

CLR 中匿名函数的实现原理浅析

函数 CLR 中匿名函数的实现原理浅析 C# 2.0中提供了通过delegate实现匿名函数功能,能有效地减少用户的薄记代码工作,例如 以下为引用: ...button1.Click += new EventHandler(button1_Click);...void button1_Click(Object sender, EventArgs e) { // Do something, the button was clicked...}... 可以被简化为直接使用匿名函数构造,如 以下为引用

JavaScript中匿名函数用法实例

 这篇文章主要介绍了JavaScript中匿名函数用法,实例分析了javascript中匿名函数的功能.定义及具体用法,需要的朋友可以参考下     本文实例讲述了JavaScript中匿名函数用法.分享给大家供大家参考.具体分析如下: JS中可以不用给函数名称,而是在使用时直接通过function把函数体赋值给相关的事件或者变量. 下面的JS代码给按钮设定了一个onclick事件,使用了匿名函数 ? 1 2 3 4 5 6 7 8 9 <form action="#">

JS中匿名函数嵌套匿名函数

问题描述 JS中匿名函数嵌套匿名函数 求详细说明为什么其中test=3明白 然后匿名函数中的匿名函数怎么调用 如果还有fn(4) fn(5) 为什么传入的都是b的值 解决方案 执行完fn(2)后,fn对应的function变了,变成 function(b){ console.log(test+b); } 所以后面fn(3),fn(4),fn(n)都是执行function(b)这个函数 解决方案二: 执行完fn(2)后,fn对应的function变了,变成 function(b){ console

js中匿名函数的创建与调用方法分析_javascript技巧

本文实例分析了js中匿名函数的创建与调用方法.分享给大家供大家参考.具体实现方法如下: 匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值,很多新手朋友对于匿名函数不了解.这里就来分析一下. function 函数名(参数列表){函数体;} 如果是创建匿名函数,那就应该是: function(){函数体;} 因为是匿名函数,所以一般也不会有参数传给他. 为什么要创建匿名函数呢?在什么情况下会使用到匿

Javascript中匿名函数的调用与写法实例详解(多种)_javascript技巧

Javascript中定义函数的方式有多种,函数直接量就是其中一种.如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数.好,看看匿名函数的如何被调用. 方式1,调用函数,得到返回值.强制运算符使函数调用执行 (function(x,y){ alert(x+y); return x+y; }(3,4)); 方式2,调用函数,得到返回值.强制函数直接量执行再返回一个引用,引用再去调用执行 (function(x,y){ alert(x+y);

浅谈C++中虚函数实现原理揭秘_C 语言

编译器到底做了什么实现的虚函数的晚绑定呢?我们来探个究竟.      编译器对每个包含虚函数的类创建一个表(称为V TA B L E).在V TA B L E中,编译器放置特定类的虚函数地址.在每个带有虚函数的类 中,编译器秘密地置一指针,称为v p o i n t e r(缩写为V P T R),指向这个对象的V TA B L E.通过基类指针做虚函数调 用时(也就是做多态调用时),编译器静态地插入取得这个V P T R,并在V TA B L E表中查找函数地址的代码,这样就能调用正确的函数使

js中匿名函数的创建与调用方法分析

 匿名函数就是没有名字的函数了,也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值,很多新手朋友对于匿名函数不了解.这里就来分析一下. function 函数名(参数列表){函数体;} 如果是创建匿名函数,那就应该是: function(){函数体;} 因为是匿名函数,所以一般也不会有参数传给他. 为什么要创建匿名函数呢?在什么情况下会使用到匿名函数.匿名函数主要有两种常用的场景,一是回调函数,二是直接执行函数. 回调函数,像a

js中匿名函数的创建与调用方法

  function 函数名(参数列表){函数体;} 如果是创建匿名函数,那就应该是: function(){函数体;} 因为是匿名函数,所以一般也不会有参数传给他. 为什么要创建匿名函数呢?在什么情况下会使用到匿名函数.匿名函数主要有两种常用的场景,一是回调函数,二是直接执行函数. 回调函数,像ajax的异步操作,就需要回调函数.这里就不详解.关于直接执行函数,我看一个例子就明白了: 代码如下   <script language="javascript"> var a

(转载)JavaScript中匿名函数,函数直接量和闭包_javascript技巧

原文出处: http://www.dnew.cn/post/196.htm 先看下下面几种写法 1.function f(x){return x*x;};f(x); 2.(function(x){return x*x;})(x); 3.(function(x){return x*x;}(x)); 第一种我们应该都很熟悉了,这是我们经常使用的写法.第二第三种都是匿名函数的写法. ------------------------------------------------------------