使用“=>”进行语法说明

本文关键字:语法 说明 使用 | 更新日期: 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 表达式,该函数具有两个参数,se

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