您的位置:首页 > 编程语言 > C#

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");
}
}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: