VB9에서 여러 줄 Function 문제 해결(Visual Studio 2008)

1560 단어 function
C#에서 익명의 방법은 여러 줄 (유, 무) 반환값 처리 프로그램을 지원하지만, VisualBasic에서는 여러 줄의 함수나 과정을 지원하지 않는 것 같습니다.어떡하지?예를 살펴보겠습니다.
List (Of T) 에는 Find 와 FindAll 함수가 포함되어 있습니다. 이 두 함수는 하나의 함수인 Predicate (Of T) As Boolean을 예로 들면 바로 이렇게 시도할 수 있습니다 (예시적 코드).
Public Function MyFunc(t As T) As Boolean

………………

End Function



List(Of T).Find/FindAll(MyFunc)

………………


사실 우리는 봉인할 수 있다.
Public MustInherit Class BasePredicate(Of T As IComparable)

    Public Shared Widening Operator CType(ByVal subclass As BasePredicate(Of T)) As Predicate(Of T)

        Return New Predicate(Of T)(AddressOf subclass.GeneralDo)

    End Operator



    Public MustOverride Function GeneralDo(ByVal t As T) As Boolean

End Class


이 클래스는 CType의 Widening 방법을 사용합니다. (자동으로 클래스를 하나의 Predicate로 변환합니다. Predicate의 필요 매개 변수는 공교롭게도 하위 클래스가 반드시 실현해야 하는 추상적인 클래스GeneralDo입니다. 예를 들어 하위 클래스처럼 실현됩니다.
Public Class IntFindAll

    Inherits BasePredicate(Of Integer)



    Public Overrides Function GeneralDo(t As Integer) As Boolean

        Return t Mod 2 = 0

    End Function

End Class


그러면 하위 클래스는 다음과 같이 호출할 수 있습니다.
Public Class Program

    Shared Sub Main(args As String())

        Dim numbers As New List(Of Integer) From {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}

        For Each i As Integer In numbers.FindAll(New IntFindAll())

            Console.WriteLine(i)

        Next

    End Sub

End Class


내 생각에 이것은 VS2008에서 VB가 C#의 기능을 잃어버려서 VB의 일부 프로그래머들이 마음의 불균형을 초래한 것을 보완할 수 있을 것 같다. 아하하......

좋은 웹페이지 즐겨찾기