C#中的匿名函数

来源:互联网 发布:ubuntu u盘刻录工具 编辑:程序博客网 时间:2024/05/21 00:56

匿名方法:

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");      }}
                                             
1 0
原创粉丝点击