Share via


Sub 문(Visual Basic)

Sub 프로시저를 정의하는 이름, 매개 변수 및 코드를 선언합니다.

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Sub ]
    [ statements ]
End Sub

요소

용어

정의

attributelist

선택 사항입니다. 특성 목록을 참조하십시오.

Partial

선택 사항입니다. 부분 메서드(Partial Method)의 정의를 나타냅니다. 자세한 내용은 부분 메서드(Visual Basic)를 참조하십시오.

accessmodifier

선택 사항입니다. 다음 중 하나일 수 있습니다.

자세한 내용은 Visual Basic의 액세스 수준를 참조하십시오.

proceduremodifiers

선택 사항입니다. 다음 중 하나일 수 있습니다.

Shared

선택 사항입니다. Shared를 참조하십시오.

Shadows

선택 사항입니다. Shadows를 참조하십시오.

Async

선택 사항입니다. 볼 비동기.

name

필수 요소. 프로시저의 이름입니다. 자세한 내용은 선언된 요소 이름(Visual Basic)를 참조하십시오. 클래스에 대한 생성자를 프로시저를 만들려면 Sub 프로시저의 이름을 New 키워드로 설정합니다. 자세한 내용은 개체 수명: 개체가 만들어지고 소멸되는 방법(Visual Basic)을 참조하십시오.

typeparamlist

선택 사항입니다. 제네릭 프로시저의 형식 매개 변수 목록입니다. 형식 목록을 참조하십시오.

parameterlist

선택 사항입니다. 이 프로시저의 매개 변수를 나타내는 지역 변수 이름 목록입니다. 자세한 내용은 매개 변수 목록(Visual Basic)를 참조하십시오.

Implements

선택 사항입니다. 이 프로시저에서 하나 이상의 Sub 프로시저를 구현하며 각 프로시저가 이 프로시저의 포함하는 클래스 또는 구조체에서 구현되는 인터페이스에 정의되었음을 나타냅니다. 자세한 내용은 Implements 문를 참조하십시오.

implementslist

Implements문을 사용할 경우 필수적 요소입니다. 구현될 Sub 프로시저 목록입니다.

implementedprocedure [ , implementedprocedure ... ]

각 implementedprocedure의 구문과 구성 요소는 다음과 같습니다.

interface.definedname

파트

설명

interface

필수 요소. 이 프로시저의 포함하는 클래스 또는 구조체에 의해 구현되는 인터페이스의 이름입니다.

definedname

필수 요소. 프로시저를 interface에 정의할 때 사용되는 이름입니다.

Handles

선택 사항입니다. 이 프로시저에서 하나 이상의 특정 이벤트를 처리할 수 있음을 나타냅니다. 자세한 내용은 Handles 절(Visual Basic)를 참조하십시오.

eventlist

Handles를 제공하는 경우 필수적 요소입니다. 이 프로시저에서 처리하는 이벤트 목록입니다.

eventspecifier [ , eventspecifier ... ]

각 eventspecifier의 구문과 구성 요소는 다음과 같습니다.

eventvariable.event

파트

설명

eventvariable

필수 요소. 이벤트를 발생시키는 클래스 또는 구조체의 데이터 형식으로 선언된 개체 변수입니다.

event

필수 요소. 이 프로시저에서 처리하는 이벤트의 이름입니다.

statements

선택 사항입니다. 이 프로시저 내에서 실행될 문 블록입니다.

End Sub

이 프로시저의 정의를 종료합니다.

설명

모든 실행 코드는 프로시저 내에 있어야 합니다. 사용 된 Sub 프로시저는 호출 코드에 값을 반환 하 고 싶지 않은 경우. 사용 된 Function 프로시저는 값을 반환 하려는 경우.

Sub 프로시저를 정의합니다.

정의할 수 있는 Sub 프로시저는 모듈 수준 에서만. Sub 프로시저의 선언 컨텍스트 따라서 클래스, 구조체, 모듈 또는 인터페이스 이어야, 하며 소스 파일, 네임 스페이스, 프로시저 또는 블록 될 수 없습니다. 자세한 내용은 선언 컨텍스트 및 기본 액세스 수준(Visual Basic)을 참조하십시오.

Sub 프로시저는 기본적으로 공용 액세스입니다. 액세스 한정자를 사용 하 여 액세스 수준을 조정할 수 있습니다.

이 프로시저를 사용 하는 경우는 Implements 키워드, 클래스 또는 구조체에 있어야는 Implements 문 바로 다음에 오는 해당 Class 또는 Structure 문. Implements 문에 지정 된 각 인터페이스를 포함 해야 implementslist. 그러나 인터페이스를 정의 하는 이름에 Sub (에서 definedname)이이 프로시저의 이름과 일치 하지 않아도 (에서 name).

Sub 프로시저에서 반환

경우는 Sub 프로시저가 호출 코드로 반환, 실행이 호출 문 다음의 문으로 계속.

다음 예제에서는 Sub 프로시저에서의 반환을 보여 줍니다.

Sub mySub(ByVal q As String)
    Return
End Sub 

Exit Sub 및 Return 문은 Sub 프로시저를 즉시 끝냅니다. 프로시저 내의 임의의 위치에 여러 개의 Exit Sub 및 Return 문을 사용할 수 있으며 Exit Sub 문과 Return 문을 혼합하여 사용할 수 있습니다.

Sub 프로시저를 호출합니다.

호출 된 Sub 프로시저에서 문을 프로시저 이름을 사용 하 여 다음 해당 이름으로 해당 인수 목록 괄호로. 만 모든 인수를 제공 하지 않는 경우 괄호를 생략 해도 됩니다. 그러나 항상 괄호를 포함하면 코드를 보다 쉽게 읽을 수 있습니다.

A Sub 절차 및 Function 절차 매개 변수를 사용 하 고 일련의 문 실행할 수 있습니다. 그러나 한 Function 프로시저 반환 값 및 Sub 절차를 하지 않습니다. 따라서 사용할 수 없는 한 Sub 프로시저는 식에.

사용할 수 있습니다에서 Call 호출할 때 키워드는 Sub 절차, 하지만 키워드 대부분의 권장 되지 않습니다. 자세한 내용은 Call 문(Visual Basic)을 참조하십시오.

Visual Basic에서는 내부 효율성을 향상시키기 위해 산술식을 다시 정렬하기도 합니다. 따라서 인수 목록에 다른 프로시저를 호출 하는 식을 포함 되어 있는 경우 해당 식을 특정 순서로 호출할 것 가정 안.

Async Sub 프로시저

비동기 기능을 사용 하 여 비동기 함수의 명시적 콜백을 사용 하 여 또는 수동으로 코드를 여러 개의 함수 또는 람다 식을 분할 하지 않고도 호출할 수 있습니다.

프로시저를 표시 하는 경우는 Async 한정자를 사용할 수 있는 Await 연산자 프로시저에서. 때 충전을 제어는 Await 식에는 Async 절차, 제어를 호출자에 게 반환 하 고 절차 진행 바뀌게 작업이 완료 될 때까지 일시 중단 합니다. 작업이 완료 되 면 실행 절차에서 다시 시작할 수 있습니다.

참고

Async 프로시저를 아직 완료 되지 않았습니다 중 하나는 첫 번째 바뀌게 개체가 발견 되 면 호출자 또는 끝 부분에 반환의 Async 절차 도달할 둘 중 먼저 발생 합니다.

표시할 수도 있습니다는 Function 문(Visual Basic) 에 있는 Async 한정자. Async 함수는 반환 형식을 가질 수 있습니다 Task 또는 Task. 이 항목에서는 설명 예 나중에 Async 의 반환 형식이 있는 함수 Task.

AsyncSub프로시저는 값을 반환할 수 없습니다 이벤트 처리기에 대 한 주로 사용 됩니다. AsyncSub 절차를 갖 수 없습니다 호출자의 AsyncSub 프로시저가 예외를 catch 수 없습니다 하는 Sub 프로시저 throw.

Async 프로시저는 선언할 수 없습니다 ByRef 매개 변수입니다.

에 대 한 자세한 내용은 Async 내용은 Async 및 Await를 사용한 비동기 프로그래밍(C# 및 Visual Basic), 비동기 프로그램의 제어 흐름(C# 및 Visual Basic), 및 비동기 반환 형식(C# 및 Visual Basic).

예제

다음 예제에서는 Sub 문을 사용하여 Sub 프로시저의 본문을 형성하는 이름, 매개 변수 및 코드를 정의합니다.

Sub computeArea(ByVal length As Double, ByVal width As Double)
    ' Declare local variable. 
    Dim area As Double 
    If length = 0 Or width = 0 Then 
        ' If either argument = 0 then exit Sub immediately. 
        Exit Sub 
    End If 
    ' Calculate area of rectangle.
    area = length * width
    ' Print area to Immediate window.
    Debug.WriteLine(area)
End Sub

다음 예제에서 DelayAsync 되는 AsyncFunction 반환 유형을 가진 Task. DelayAsync가 Return 정수를 반환 하는 명령문입니다. 함수 선언에 따라서 DelayAsync 의 반환 형식이 있어야 합니다 Task(Of Integer). 반환 형식이 기 때문에 Task(Of Integer), 평가 Await 식에서 DoSomethingAsync 정수 다음 문에서 볼 수 있듯이 생성: Dim result As Integer = Await delayTask.

startButton_Click 프로시저의 예입니다의 Async Sub 프로시저. 때문에 DoSomethingAsync 되는 Async 함수를 호출 하기 위해 작업 DoSomethingAsync 다음 문에서 볼 수 있듯이 갖 될 해야 합니다: Await DoSomethingAsync(). startButton_ClickSub 프로시저를 정의할 수는 Async 한정자 때문에 Await 식.

' Imports System.Diagnostics 
' Imports System.Threading.Tasks 

' This Click event is marked with the Async modifier. 
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
    Await DoSomethingAsync()
End Sub 

Private Async Function DoSomethingAsync() As Task
    Dim delayTask As Task(Of Integer) = DelayAsync()
    Dim result As Integer = Await delayTask

    ' The previous two statements may be combined into 
    ' the following statement. 
    ' Dim result As Integer = Await DelayAsync()

    Debug.WriteLine("Result: " & result)
End Function 

Private Async Function DelayAsync() As Task(Of Integer)
    Await Task.Delay(100)
    Return 5
End Function 

'  Output: 
'   Result: 5

참고 항목

작업

방법: 제네릭 클래스 사용(Visual Basic)

프로시저 문제 해결(Visual Basic)

참조

Implements 문

Function 문(Visual Basic)

매개 변수 목록(Visual Basic)

Dim 문(Visual Basic)

Call 문(Visual Basic)

Of 절(Visual Basic)

개념

매개 변수 배열(Visual Basic)

부분 메서드(Visual Basic)