РЕДАКТИРОВАТЬ: Хорошо, я не заметил бит "2005" в названии. Мой оригинальный ответ позже (под линией) - вот полный ответ для VB.NET 2005.
Вы можете создать класс (или структуру, я полагаю), содержащий постоянное значение, а затем использовать AddressOf
для преобразования функции этого типа в делегат. Вы можете сделать это проще, создав функцию Shared
, чтобы соединить эти два шага.
Вот короткая, но полная программа, чтобы продемонстрировать это:
Public Delegate Function Function3 (ByVal x As Integer, _
ByVal y As Integer, ByVal z As Integer) As Integer
Public Class Constant
Private value As Integer
Public Sub New (ByVal value As Integer)
Me.value = value
End Sub
Public Function ReturnValue(ByVal x As Integer, _
ByVal y As Integer, ByVal z As Integer) _
As Integer
Return value
End Function
Public Shared Function CreateFunction _
(ByVal x As Integer) As Function3
Dim c As Constant = New Constant(x)
return AddressOf c.ReturnValue
End Function
End Class
Public Module Test
Public Sub Main
Dim func As Function3 = Constant.CreateFunction(3)
Console.WriteLine(func(8, 9, 10))
End Sub
End Module
В вашем случае вы бы использовали его с:
Process(data, Constant.CreateFunction(g))
Оригинальный ответ
Вы можете использовать лямбда-выражение, хотя с тремя параметрами это будет не очень приятно:
Process(data, Function(x as Integer, y as Integer, z as Integer) g)
Другой альтернативой было бы написать функцию , возвращающую функцию, которая вернула константу:
Public Function Constant(value as Integer) As MyDelegateType
Return Function(x as Integer, y as Integer, z as Integer) value
End Function
Затем назовите его с помощью:
Process(data, Constant(g))
Извиняюсь, если какой-то синтаксис слегка выключен - я действительно не VB человек.