在处理事件时创建一个新的委托会带来什么好处

  • 本文关键字:创建 处理事件 一个 blazor
  • 更新时间 :
  • 英文 :


增加了什么值

<MyControl ServerData="@(new Func<TableState, Task<TableData<int>>>(ServerReload))">

与此相对:

<MyControl ServerData="@ServerReload">

处理程序所在位置:

private async Task<TableData<int>> ServerReload(TableState state) {...}

文档使用了第二种方法,而没有提及第一种方法。

没有"好处",因为没有区别。

以下全部编译:

var f1 = new Func<TableState, Task<TableData<int>>>(ServerReload));
Func<TableState, Task<TableData<int>>> f2 = ServerReload;    
f2 = f1;

第二种形式只是自C#2以来可用的简写形式。但它是按照第一个长形式编译的,Func是一个委托,需要是new-ed。

您得到完全相同的IL代码,所以唯一的区别是可读性。当然,第二种简短形式是非常可取的。

在C#1中,你必须写:

MyDelegateType myDelegateVar = new MyDelegateType(MethodName);

从C#2开始,您可以编写与相同的内容

MyDelegateType myDelegateVar = MethodName;

最新更新