对可读性使用Action(Of T ...)而不是自定义委托语法

时间:2011-01-07 14:29:50

标签: .net vb.net compiler-construction action

从.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)而不是一个好类?我的实际代码片段具有这些嵌套,因此它在一系列方法中传递Action。

对不起VB的例子,A​​ddressOf只是VBs说new Action(AnAction)的方式。此外,我只是将其写入浏览器,因此它可能无法编译。

如何让人们阅读和使用这些编译器通用操作,而不是为解决方案中的确切要求而设计的适当特殊实体?

1 个答案:

答案 0 :(得分:3)

新的FuncAction委托是简单委托的首选,例如LINQ方法中的委托。

如果使用FuncAction s会导致类型名称不可读,那么您当然应该定义自己的代理。

通常,您应该选择产生最易读代码的设计。