使用“=>”进行语法说明
本文关键字:语法 说明 使用 | 更新日期: 2023-09-27 18:17:29
>任何人都可以用简单的英语告诉我下面的代码发生了什么,特别是围绕=>
和+=
符号的使用:
var ls = new LibraryServiceClient(AppSettings.Get("LibraryServiceBaseAddress"),
SessionId, App.Id, _user.UUID);
ls.MakingRequest += (s, e) =>
{
LogStash.LogDebug("Library Service | Before making request : {0}",
DateTime.UtcNow.ToString("HH:mm:ss.fff"));
};
为事件分配一个新的委托:
ls.MakingRequest +=
您创建一个 lambda 表达式,该函数具有两个参数,s
和 e
:
(s, e) =>
其中 lambda 表达式的操作为:
{ LogStash.LogDebug("Library Service | Before making request : {0}", DateTime.UtcNow.ToString("HH:mm:ss.fff"));
(s,e) => { /*expresion*/ }
是一个 lambda 函数。
它的类型是Action<object, EventArgs>
。
ls.MakingRequest
是一个事件。
使用 +=
可以向此事件注册处理程序。触发事件时,将执行所有已注册的处理程序。
处理程序与操作具有相同的签名 - 它接受一个object
发送方和一个EventArgs
eventArgs 并返回 void
。因此,lambda 函数类型是兼容的,因此将在触发事件时调用它。
它是一种语法糖,使链式扩展方法看起来更具可读性。
下面的代码将解释它的演变:
public class Program
{
public void Main(string[] args)
{
// named delegate
Tasker t = new Tasker();
t.doer += DoProvider.DoThis;
t.CallDoer("I am doing something");
// anonymous method
Tasker t2 = new Tasker();
t2.doer += delegate(string s){
Console.WriteLine (s);
};
t2.CallDoer("I am doing something again");
// syntactical sugar over anonymous methods aka lambda expressions
Tasker t3 = new Tasker();
t3.doer += (s)=>{
Console.WriteLine (s);
};
t3.CallDoer("I am doing yet another thing");
}
}
public delegate void DoSomething(string Foo);
public class Tasker
{
public event DoSomething doer;
public void CallDoer(string s)
{
doer.Invoke(s);
}
}
public static class DoProvider
{
public static void DoThis(string Bar)
{
Console.WriteLine (Bar);
}
}