C#中的匿名函数
2016-03-31 18:22
465 查看
匿名方法:
C# 支持用于调用一个或多个方法的委托 (delegate)。委托提供运算符和方法来添加或删除目标方法,它也可以在整个 .NET 框架中广泛地用于事件、回调、异步调用、多线程等。常规委托:
class SomeClass { delegate void SomeDelegate(); public void InvokeMethod() { SomeDelegate del = new SomeDelegate(SomeMethod); del(); } void SomeMethod() { MessageBox.Show("Hello"); } }
<span style="font-family:Arial;"><strong>可以用一个匿名方法来定义和实现这个方法:</strong></span>
class SomeClass { delegate void SomeDelegate(); public void InvokeMethod() { SomeDelegate del = delegate() { MessageBox.Show("Hello"); }; del(); } }
============================================================= class SomeClass { delegate void SomeDelegate(); public void SomeMethod() { InvokeDelegate(delegate(){MessageBox.Show("Hello");}); } void InvokeDelegate(SomeDelegate del) { del(); } } <span style="font-family:Arial;"><strong>将参数传递到匿名方法:</strong></span>
<strong><span style="font-family:Arial;"></span></strong><pre class="codeSample" name="code" style="white-space: pre-wrap; word-wrap: break-word;">class SomeClass { delegate void SomeDelegate(string str); public void InvokeMethod() { SomeDelegate del = delegate(string str) { MessageBox.Show(str); }; del("Hello"); } }
<strong><span style="font-family:Arial;">一般的匿名方法:</span></strong> <pre class="codeSample" name="code" style="white-space: pre-wrap; word-wrap: break-word;">class SomeClass<T> { delegate void SomeDelegate(T t); public void InvokeMethod(T t) { SomeDelegate del = delegate(T item){...} del(t); } }
<strong>注意点:</strong>
1.如果匿名方法没有参数,则可以在 delegate 关键字后面使用一对空括号:
class SomeClass{delegate void SomeDelegate();public void InvokeMethod(){SomeDelegate del = delegate(){MessageBox.Show("Hello");};del();}}
<span style="font-family:Arial;">2.如果您将 delegate 关键字与后面的空括号一起忽略,</span>
<span style="font-family:Arial;">则您将定义一种特殊的匿名方法,它可以指派给具有任何签名的任何委托:</span>
<pre class="codeSample" name="code" style="white-space: pre-wrap; word-wrap: break-word;">class SomeClass { delegate void SomeDelegate(string str); public void InvokeMethod() { SomeDelegate del = delegate { MessageBox.Show("Hello"); }; del("Parameter is ignored"); } }
相关文章推荐
- C# 写的32位COM组件,如何在64位系统上注册
- C# Window编程随记——C#反射技术的简单操作(读取和设置类的属性)
- C# WinForm国际化实现的简单方法
- C# 委托 线程 窗体假死
- C# IList集合扩展方法 -- 集合排序
- C#实现获取连续日期的问题
- c# winform 点菜宝接口demo程序
- C# Unicode编码与解码方法
- c#大圣之路笔记——c#编程之Password加密
- C# 字节转换成"B", "KB", "MB", "GB", "TB", "PB"实例
- C#中偏移量和长度超出数组的界限的问题
- C#读取excel等表格常用方法
- C#中如何生成矢量图
- C#基本功------委托和事件(一)
- C# 泛型
- C# 内存泄漏
- C# 匿名类型
- C# 嵌套类
- C# 定义常量 注意:C#不能使用 #define
- C# 同步调用 异步调用 异步回调 多线程的作用