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
attributelistOpcionális. Lásd: Attribútumlista.
PartialOpcionális. Részleges metódus definícióját jelzi. Lásd a részleges metódusokat.
accessmodifierOpcionális. A következők egyike lehet:
Lásd a Visual Basic hozzáférési szintjeinek megtekintését.
proceduremodifiersOpcionális. A következők egyike lehet:
MustOverride OverridesNotOverridable Overrides
SharedOpcionális. Lásd: Megosztott.
ShadowsOpcionális. Lásd: Árnyékok.
AsyncOpcionális. Lásd: Async.
nameSzü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
SubaNewkulcsszóra. További információ: Objektumélettartam: Az objektumok létrehozása és megsemmisítése.typeparamlistOpcionális. Egy általános eljárás típusparamétereinek listája. Lásd: Típuslista.
parameterlistOpcionális. Az eljárás paramétereit képviselő helyi változónevek listája. Lásd: Paraméterlista.
ImplementsOpcionális. Azt jelzi, hogy ez az eljárás egy vagy több
Subeljá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.implementslistImplementsHa meg van adva, kötelező megadni.SubA végrehajtandó eljárások listája.implementedprocedure [ , implementedprocedure ... ]Mindegyik
implementedprocedurea következő szintaxist és részeket tartalmazza:interface.definednameRész Leírás interfaceSzükséges. Az eljárás által megvalósított felület neve, amely osztályt vagy struktúrát tartalmaz. definednameSzükséges. Az eljárás definiáló interfaceneve.HandlesOpcionális. Azt jelzi, hogy ez az eljárás képes kezelni egy vagy több konkrét eseményt. Lásd: Fogópontok.
eventlistHandlesHa meg van adva, kötelező megadni. Az eljárás által kezelt események listája.eventspecifier [ , eventspecifier ... ]Mindegyik
eventspecifiera következő szintaxist és részeket tartalmazza:eventvariable.eventRész Leírás eventvariableSzükséges. Az eseményt generáló osztály vagy struktúra adattípusával deklarált objektumváltozó. eventSzükséges. Az eljárás által kezelt esemény neve. statementsOpcionális. Az eljáráson belül futtatandó utasítások blokkja.
End SubLeá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 Class utasításának szövegétStructure. 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 Exit Sub megadhatja Return 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 egy függvényutasítást Async 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 AsyncSub eljárás nem várható meg, és az eljárás hívója AsyncSub 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 AsyncFunction 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_ClickSub 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