自 .net 4.0 以来,使用以下语法是新的礼仪:
Private Sub Main()
MyMethod(AddressOf AnAction)
End Sub
Private Sub MyMethod(ByVal toDo As Action(Of String, Integer, Boolean))
toDo.Invoke("Tom", 1, True)
End Sub
Private Sub AnAction(ByVal p1 As String, ByVal p2 As Integer, ByVal p3 As Boolean)
End Sub
相对于:
Private Delegate Sub MyActionDlg(ByVal p1 As String, ByVal p2 As Integer, ByVal p3 As Boolean)
Private Sub Main()
MyMethod(AddressOf AnAction)
End Sub
Private Sub MyMethod(ByVal toDo As MyActionDlg)
toDo.Invoke("Tom", 1, True)
End Sub
Private Sub AnAction(ByVal p1 As String, ByVal p2 As Integer, ByVal p3 As Boolean)
End Sub
这对于 Tuples/Func 也是一样的。写得很好,但有些地方感觉有点草率。为什么有人想要 Tuple(Of T, T2, T3, T4) 而不是一个好的类类型?我的实际代码片段有这些嵌套,因此它以一系列方法传递操作。
抱歉,对于 VB 示例,AddressOf 只是 VB 的表达方式
new Action(AnAction)
。另外,我只是将其写入浏览器,因此它可能也无法编译。
人们对阅读和使用这些编译器通用操作有何感受,而不是针对解决方案中的具体要求而设计的适当的特殊实体?
新的
Func
和 Action
委托是简单委托的首选,例如 LINQ 方法中的 sed 委托。
如果使用
Func
s 或 Action
s 会导致不可读的类型名,您当然应该定义自己的委托。
一般来说,您应该选择能够产生最具可读性的代码的设计。