Visual Basic .NET에서 익명 메소드는 람다 표현식(Function 또는 Sub)을 통해 구현됩니다. 이들은 별도의 이름이 있는 프로시저를 만들지 않고도 소규모 코드 블록을 정의할 수 있게 합니다. 사용 예시는 다음과 같습니다:
Dim squared = Function(x As Integer) x * x Console.WriteLine(squared(5)) ' 출력: 25 Dim numbers = {1, 2, 3, 4} Dim evens = numbers.Where(Function(n) n Mod 2 = 0) For Each n In evens Console.WriteLine(n) Next
장점:
제한사항:
질문: "내부에 GoTo 연산자를 가진 프로시저를 선언하기 위해 람다 표현식을 사용할 수 있습니까? 왜입니까?"
정답: 아닙니다, VB.NET의 람다 표현식은 GoTo, GoSub 또는 Label과 같은 흐름 제어 도구를 사용하는 것을 허용하지 않습니다. 이는 익명 메소드의 구현 특성과 관련이 있습니다. GoTo를 사용하려고 하면 컴파일 오류가 발생합니다.
코드 예제(오류 발생):
Dim broken = Sub() GoTo Label1 Label1: End Sub
이야기
데이터 처리 프로젝트에서 GoTo를 통한 여러 출구 점을 가진 복잡한 유효성 검사를 위해 람다 표현식을 사용하려고 했습니다. 일반 메소드에서 람다 코드로 마이그레이션할 때 컴파일 오류가 발생하여 함수 아키텍처를 급히 변경해야 했습니다.
이야기
비동기 호출을 위해 익명 메소드를 사용했습니다. 내부에서 람다가 반복문에서 변경되는 변수를 우연히 참조했습니다. 이는 람다가 변수 값을 기억하는 것이 아니라 참조를 기억했기 때문에 예기치 않은 결과로 이어졌습니다. 그 결과 보고서에서 불가사의한 버그가 발생하게 되었습니다.
이야기
한 프로젝트에서 익명 메소드를 호환되지 않는 타입의 대리자로 직접 변환했습니다(예: Sub 대신 Function). 컴파일러에서 명시적인 오류가 나오지 않았지만, 이벤트 핸들러가 실행되지 않았습니다. 이는 수동 테스트 중에만 발견되었으며, 출시 지연을 초래했습니다.