Изменить:
Есть ли способ создать экземпляр делегата в .Net с использованием CodeDom? Я хочу создать что-то похожее на следующее:
Dim myDelegate As someDelegateType = New someDelegateType(AddressOf implementingMethod)
Ниже приведена более подробная информация о контексте ...
Оригинальный вопрос:
Я использую CodeDom из .Net Framework (v3.5, если это имеет значение) для генерации класса. Один из классов определяет метод делегата, который в VB.Net выглядит следующим образом:
Public Delegate Function filterByIdDelegate(ByVal obj As Object, ByVal id As Integer) As Boolean
У меня тогда есть метод, который обеспечит реализацию:
Private Function filterById(ByVal obj As Object, ByVal id As Integer) As Boolean
Return (obj.ID = id)
End Function
Вот проблема; как вы создаете экземпляр делегата (используя эквивалент AddressOf для VB.Net)? В настоящее время я делаю это (<filterByIdFunctionName>
- строка, содержащая имя функции делегата, `'- имя поля делегата):
Dim getFunction = New System.CodeDom.CodeMemberMethod()
With getFunction
'Declare delegate instance
.Statements.Add( _
New System.CodeDom.CodeVariableDeclarationStatement( _
New System.CodeDom.CodeTypeReference(<filterByIdDelegateName>) _
, "myDelegate" _
, New System.CodeDom.CodeObjectCreateExpression( _
<filterByIdDelegateName> _
, New System.CodeDom.CodeExpression() { _
New System.CodeDom.CodeMethodReferenceExpression( _
New System.CodeDom.CodeThisReferenceExpression() _
, <filterByIdFunctionName> _
) _
} _
) _
) _
)
End With
Это приводит к следующему выводу:
Dim myDelegate As filterByIdDelegate = New filterByIdDelegate(Me.filterById)
То, что я ищу, это:
Dim myDelegate As filterByIdDelegate = New filterByIdDelegate(AddressOf Me.filterById)
Есть мысли?