Dela via


Underuttryck (Visual Basic)

Deklarerar namn, parametrar och kod som definierar en Sub procedur.

Syntax

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

Delar

  • attributelist

    Valfritt. Se Attributlista.

  • Partial

    Valfritt. Anger definitionen av en partiell metod. Se Partiella metoder.

  • accessmodifier

    Valfritt. Kan vara något av följande:

    Se Åtkomstnivåer i Visual Basic.

  • proceduremodifiers

    Valfritt. Kan vara något av följande:

  • Shared

    Valfritt. Se Delat.

  • Shadows

    Valfritt. Se Skuggor.

  • Async

    Valfritt. Se Async.

  • name

    Obligatoriskt. Namnet på proceduren. Se Deklarerade elementnamn. Om du vill skapa en konstruktorprocedur för en klass anger du namnet på en Sub procedur till nyckelordet New . Mer information finns i Objektlivslängd: Hur objekt skapas och förstörs.

  • typeparamlist

    Valfritt. Lista över typparametrar för en allmän procedur. Se Typlista.

  • parameterlist

    Valfritt. Lista över lokala variabelnamn som representerar parametrarna för den här proceduren. Se Parameterlista.

  • Implements

    Valfritt. Anger att den här proceduren implementerar en eller flera Sub procedurer, var och en definierad i ett gränssnitt som implementeras av den här procedurens innehållande klass eller struktur. Se Implementeringsinstruktor.

  • implementslist

    Krävs om Implements anges. Sub Lista över procedurer som implementeras.

    implementedprocedure [ , implementedprocedure ... ]

    Var implementedprocedure och en har följande syntax och delar:

    interface.definedname

    Delvis beskrivning
    interface Obligatoriskt. Namnet på ett gränssnitt som implementeras av den här proceduren och som innehåller klass eller struktur.
    definedname Obligatoriskt. Namn med vilket proceduren definieras i interface.
  • Handles

    Valfritt. Anger att den här proceduren kan hantera en eller flera specifika händelser. Se Referenser.

  • eventlist

    Krävs om Handles anges. Lista över händelser som den här proceduren hanterar.

    eventspecifier [ , eventspecifier ... ]

    Var eventspecifier och en har följande syntax och delar:

    eventvariable.event

    Delvis beskrivning
    eventvariable Obligatoriskt. Objektvariabel deklarerad med datatypen för klassen eller strukturen som genererar händelsen.
    event Obligatoriskt. Namnet på den händelse som den här proceduren hanterar.
  • statements

    Valfritt. Block med instruktioner som ska köras inom den här proceduren.

  • End Sub

    Avslutar definitionen av den här proceduren.

Kommentarer

All körbar kod måste finnas i en procedur. Använd en Sub procedur när du inte vill returnera ett värde till den anropande koden. Använd en Function procedur när du vill returnera ett värde.

Definiera en underprocedur

Du kan bara definiera en Sub procedur på modulnivå. Deklarationskontexten för en underprocedur måste därför vara en klass, en struktur, en modul eller ett gränssnitt och får inte vara en källfil, ett namnområde, en procedur eller ett block. Mer information finns i Deklarationskontexter och standardåtkomstnivåer.

Sub som standard för offentlig åtkomst. Du kan justera deras åtkomstnivåer med hjälp av åtkomstmodifierarna.

Om proceduren använder nyckelordet Implements måste den innehållande klassen eller strukturen ha en Implements instruktion som omedelbart följer dess Class eller Structure -instruktionen. Instruktionen Implements måste innehålla varje gränssnitt som anges i implementslist. Det namn med vilket ett gränssnitt definierar Sub (i definedname) behöver dock inte matcha namnet på den här proceduren (i name).

Returnerar från en underprocedur

När en Sub procedur återgår till anropskoden fortsätter körningen med -instruktionen efter -instruktionen som anropade den.

I följande exempel visas en retur från en Sub procedur.

Sub mySub(ByVal q As String)
    Return
End Sub

- Exit Sub instruktionerna och Return orsakar ett omedelbart utträde från en Sub procedur. Valfritt antal Exit Sub och Return instruktioner kan visas var som helst i proceduren och du kan blanda Exit Sub och Return instruktioner.

Anropa en underprocedur

Du anropar en Sub procedur genom att använda procedurnamnet i en -instruktion och sedan följa det namnet med dess argumentlista inom parenteser. Du kan bara utelämna parenteserna om du inte anger några argument. Din kod är dock mer läsbar om du alltid inkluderar parenteserna.

En Sub procedur och en Function procedur kan ha parametrar och utföra en serie instruktioner. En procedur returnerar dock Function ett värde och en Sub procedur gör det inte. Därför kan du inte använda en Sub procedur i ett uttryck.

Du kan använda nyckelordet Call när du anropar en Sub procedur, men det nyckelordet rekommenderas inte för de flesta användningsområden. Mer information finns i Samtalsinstrukation.

Visual Basic ordnar ibland om aritmetiska uttryck för att öka den interna effektiviteten. Därför bör du inte anta att dessa uttryck anropas i en viss ordning om argumentlistan innehåller uttryck som anropar andra procedurer.

Async-underprocedurer

Genom att använda funktionen Async kan du anropa asynkrona funktioner utan att använda explicita motringningar eller manuellt dela upp koden mellan flera funktioner eller lambda-uttryck.

Om du markerar en procedur med Async-modifieraren kan du använda Operatorn Await i proceduren. När kontrollen når ett Await uttryck i proceduren Async återgår kontrollen till anroparen och förloppet i proceduren pausas tills den väntade aktiviteten har slutförts. När uppgiften är klar kan körningen återupptas i proceduren.

Kommentar

En Async procedur återgår till anroparen när antingen det första inväntade objektet som ännu inte har slutförts påträffas eller när slutet av proceduren Async har nåtts, beroende på vilket som inträffar först.

Du kan också markera en funktionssats med Async modifieraren. En Async funktion kan ha en returtyp av Task<TResult> eller Task. Ett exempel senare i det här avsnittet visar en Async funktion som har returtypen Task<TResult>.

AsyncSub procedurer används främst för händelsehanterare, där ett värde inte kan returneras. Det Async Sub går inte att vänta på en procedur och anroparen av en Async Sub procedur kan inte fånga undantag som proceduren Sub genererar.

En Async procedur kan inte deklarera några ByRef-parametrar .

Mer information om Async procedurer finns i Asynkron programmering med Async och Await, Kontrollflöde i Async-program och Async Return Types.

Exempel 1

I följande exempel används -instruktionen Sub för att definiera namn, parametrar och kod som utgör brödtexten i en Sub procedur.

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

Exempel 2

I följande exempel DelayAsync är en Async Function som har en returtyp av Task<TResult>. DelayAsync har en Return instruktion som returnerar ett heltal. Funktionsdeklarationen DelayAsync för måste därför ha en returtyp av Task(Of Integer). Eftersom returtypen är Task(Of Integer)genererar utvärderingen av Await uttrycket i DoSomethingAsync ett heltal, som följande instruktion visar: Dim result As Integer = Await delayTask.

Proceduren startButton_Click är ett exempel på en Async Sub procedur. Eftersom DoSomethingAsync är en Async funktion måste uppgiften för anropet inväntas DoSomethingAsync , som följande instruktion visar: Await DoSomethingAsync(). Proceduren startButton_Click Sub måste definieras med Async modifieraren eftersom den har ett Await uttryck.

' 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

Se även