편집 : 좋아, 나는 제목에 "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, Constant(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, Function(x as Integer, y as Integer, z as Integer) g)
가 또 다른 대안이 상수가 반환하는 기능을 반환하는 함수 를 작성하는 것 어떤 문법은 약간입니다. 저는 VB 사람이 아닙니다.
VB.NET 2005에서 람다 식을 사용할 수 있습니까? 하지만 lamda 표현식 (OCaml과 같은 기능 언어에서는 매우 간단 함)을 사용하면 매우 쉽습니다. – Laurent
기본적으로 제 문제는 다음과 같습니다. VB.NET 2005에서 람다 식없이 어떻게 할 수 있습니까? – Laurent
아니요. VB8에서는 람다 식을 사용할 수 없습니다. 상수를 보유 할 클래스를 만든 다음 AddressOf를 사용하여 매개 변수를 무시하고 값을 반환하는 함수를 참조하는 대리자를 가져와야합니다. –