【发布时间】:2015-04-24 08:48:16
【问题描述】:
当我看到表单的函数调用时:
Dim i as Integer = getAnInteger("I am groot")
我知道getAnInteger的签名应该是这样的
Function getAnInteger(inp As String) As Integer
现在,我有这个电话:
Property Name As String
Get
Return _name
End Get
Set(ByVal value as String)
_name = value
doSomething(Function() Name) '<---- this one
End Set
End Property
我发现doSomething 一定是这样定义的
Sub doSomething(ByVal fnName As Func(Of String))
'
' or
'
Sub doSomething(Of T)(ByVal fnName As Func(Of T)) '....................(1)
我发现它是
Sub doSomething(Of T)(ByVal fnName As Expression(Of Func(Of T))) '.....(2)
问题
为什么Func(Of T) 和Expression(Of Func(Of T)) 都可以接受Function() Name 参数,其中Name 是String 类型的属性。此外,Expression 位于 Linq 命名空间中。所以参数必须是一个 linq 表达式。但是,Function() Name 不是 Linq!它是Name 属性的简单委托。那么这个东西是如何工作的呢?
【问题讨论】: