Megosztás a következőn keresztül:


Alutasítás (Visual Basic)

Deklarálja az eljárást meghatározó Sub nevet, paramétereket és kódot.

Syntax

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

Részek

  • attributelist

    Opcionális. Lásd: Attribútumlista.

  • Partial

    Opcionális. Részleges metódus definícióját jelzi. Lásd a részleges metódusokat.

  • accessmodifier

    Opcionális. A következők egyike lehet:

    Lásd a Visual Basic hozzáférési szintjeinek megtekintését.

  • proceduremodifiers

    Opcionális. A következők egyike lehet:

  • Shared

    Opcionális. Lásd: Megosztott.

  • Shadows

    Opcionális. Lásd: Árnyékok.

  • Async

    Opcionális. Lásd: Async.

  • name

    Szükséges. Az eljárás neve. Lásd: Deklarált elemnevek. Ha konstruktor-eljárást szeretne létrehozni egy osztályhoz, állítsa az eljárás nevét Sub a New kulcsszóra. További információ: Objektumélettartam: Az objektumok létrehozása és megsemmisítése.

  • typeparamlist

    Opcionális. Egy általános eljárás típusparamétereinek listája. Lásd: Típuslista.

  • parameterlist

    Opcionális. Az eljárás paramétereit képviselő helyi változónevek listája. Lásd: Paraméterlista.

  • Implements

    Opcionális. Azt jelzi, hogy ez az eljárás egy vagy több Sub eljárást valósít meg, amelyek mindegyike az eljárás osztályát vagy szerkezetét tartalmazó interfészben van definiálva. Lásd: Implements Utasítás.

  • implementslist

    Implements Ha meg van adva, kötelező megadni. Sub A végrehajtandó eljárások listája.

    implementedprocedure [ , implementedprocedure ... ]

    Mindegyik implementedprocedure a következő szintaxist és részeket tartalmazza:

    interface.definedname

    Rész Leírás
    interface Szükséges. Az eljárás által megvalósított felület neve, amely osztályt vagy struktúrát tartalmaz.
    definedname Szükséges. Az eljárás definiáló interfaceneve.
  • Handles

    Opcionális. Azt jelzi, hogy ez az eljárás képes kezelni egy vagy több konkrét eseményt. Lásd: Fogópontok.

  • eventlist

    Handles Ha meg van adva, kötelező megadni. Az eljárás által kezelt események listája.

    eventspecifier [ , eventspecifier ... ]

    Mindegyik eventspecifier a következő szintaxist és részeket tartalmazza:

    eventvariable.event

    Rész Leírás
    eventvariable Szükséges. Az eseményt generáló osztály vagy struktúra adattípusával deklarált objektumváltozó.
    event Szükséges. Az eljárás által kezelt esemény neve.
  • statements

    Opcionális. Az eljáráson belül futtatandó utasítások blokkja.

  • End Sub

    Leállítja az eljárás definícióját.

Megjegyzések

Minden végrehajtható kódnak egy eljáráson belül kell lennie. Sub Akkor használjon eljárást, ha nem szeretne értéket visszaadni a hívó kódnak. Function Akkor használjon eljárást, ha értéket szeretne visszaadni.

Alművelet definiálása

Az eljárást csak a modul szintjén határozhatja meg Sub . Az alművelet deklarációs környezetének ezért osztálynak, struktúrának, modulnak vagy interfésznek kell lennie, és nem lehet forrásfájl, névtér, eljárás vagy blokk. További információ: Deklarációs környezetek és alapértelmezett hozzáférési szintek.

Sub az eljárások alapértelmezés szerint nyilvános hozzáférésre lesznek kapcsolva. A hozzáférési szinteket a hozzáférési módosítók használatával módosíthatja.

Ha az eljárás a kulcsszót Implements használja, az azt tartalmazó osztálynak vagy struktúrának egy olyan utasítással kell rendelkeznieImplements, amely azonnal követi annak vagy Structure utasításának szövegétClass. Az Implements utasításnak tartalmaznia kell a megadott implementslistösszes felületet. Az interfész által definiált Sub névnek (in definedname) azonban nem kell egyeznie az eljárás nevével (in name).

Visszatérés alműveletből

Amikor egy Sub eljárás visszatér a hívó kódhoz, a végrehajtás folytatódik az utasítást követő utasítással.

Az alábbi példa egy eljárásból származó visszatérést Sub mutat be.

Sub mySub(ByVal q As String)
    Return
End Sub

Az Exit Sub és Return az utasítások azonnali kilépést okoznak az Sub eljárásból. Tetszőleges számú Exit Sub és Return utasítás jelenhet meg az eljárás bármely pontján, és keverheti és Return megadhatja Exit Sub az utasításokat.

Alművelet meghívása

Az eljárást úgy Sub hívhatja meg, hogy egy utasításban az eljárás nevét használja, majd zárójelben követi a nevet az argumentumlistával. A zárójeleket csak akkor hagyhatja ki, ha nem ad meg argumentumokat. A kód azonban olvashatóbb, ha mindig tartalmazza a zárójeleket.

Egy Sub eljárás és egy Function eljárás paraméterekkel rendelkezhet, és utasítások sorozatát hajthatja végre. Az Function eljárás azonban értéket ad vissza, és az Sub eljárás nem. Ezért nem használhat Sub eljárást egy kifejezésben.

A kulcsszót Call akkor használhatja, amikor eljárást hív meg Sub , de a kulcsszó használata a legtöbb esetben nem ajánlott. További információ: Hívási utasítás.

A Visual Basic néha átrendezi az aritmetikai kifejezéseket a belső hatékonyság növelése érdekében. Ezért ha az argumentumlista más eljárásokat hívó kifejezéseket is tartalmaz, nem feltételezheti, hogy ezek a kifejezések egy adott sorrendben lesznek meghívva.

Aszinkron aleljárások

Az Async funkcióval explicit visszahívások nélkül, illetve a kód több függvényre vagy lambdakifejezésre történő manuális felosztása nélkül hívhatja meg az aszinkron függvényeket.

Ha az Async módosítóval jelöl meg egy eljárást, az eljárásban használhatja a Await operátort. Amikor a vezérlőelem kifejezésre jut Await az eljárásban, a Async vezérlő visszatér a hívóhoz, és az eljárás előrehaladása fel van függesztve, amíg a várt feladat be nem fejeződik. Ha a feladat befejeződött, a végrehajtás folytatódhat az eljárás során.

Feljegyzés

Az Async eljárás akkor tér vissza a hívóhoz, ha vagy az első várt objektum, amely még nem fejeződött be, vagy eléri az Async eljárás végét, attól függően, hogy melyik következik be először.

A módosítóval Async egy függvényutasítást is megjelölhet. A Async függvények visszatérési Task<TResult> típusa vagy Task. A témakör későbbi részében egy példa egy Async függvényt mutat be, amelynek visszatérési típusa a következő Task<TResult>.

AsyncSub az eljárásokat elsősorban eseménykezelőkhöz használják, ahol egy érték nem adható vissza. Az Async Sub eljárás nem várható meg, és az eljárás hívója Async Sub nem tudja kifogni az Sub eljárás által elvetett kivételeket.

Az Async eljárás nem deklarálhat ByRef-paramétereket.

Az eljárásokkal kapcsolatos Async további információkért lásd : Aszinkron programozás aszinkron és várakozási módban, Aszinkron programok folyamatának szabályozása és Aszinkron visszatérési típusok.

1. példa

Az alábbi példa az Sub utasítással határozza meg az eljárás törzsét Sub alkotó nevet, paramétereket és kódot.

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

2. példa

Az alábbi példában DelayAsync egy Async Function visszatérési Task<TResult>típussal rendelkező . DelayAsyncReturn egy egész számot visszaadó utasítással rendelkezik. Ezért a függvény deklarációjának DelayAsync visszatérési típusával kell rendelkeznie Task(Of Integer). Mivel a visszatérési típus az Task(Of Integer), a Await kifejezés DoSomethingAsync kiértékelése egész számot eredményez, ahogy az alábbi utasítás is mutatja: Dim result As Integer = Await delayTask.

Az startButton_Click eljárás egy példa egy eljárásra Async Sub . Mivel DoSomethingAsync ez egy Async függvény, a hívás DoSomethingAsync feladatát meg kell várni, ahogy az alábbi utasítás is mutatja: Await DoSomethingAsync(). Az startButton_Click Sub eljárást a Async módosítóval kell definiálni, mert kifejezéssel Await rendelkezik.

' 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

Lásd még