Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
MustOverride Overrides
NotOverridable Overrides
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
aNew
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ó interface
neve.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>.
Async
Sub
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ő . DelayAsync
Return
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