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ó Function
nevet, paramétereket és kódot.
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
attributelist
Opcionális. Lásd: Attribútumlista.
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.
Iterator
Opcionális. Lásd : Iterator.
name
Szükséges. Az eljárás neve. Lásd: Deklarált elemnevek.
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.
returntype
Ha igen, akkor
Option Strict
kötelezőOn
megadni. Az eljárás által visszaadott érték adattípusa.Implements
Opcionális. Azt jelzi, hogy ez az eljárás egy vagy több
Function
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.Function
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ás során végrehajtandó utasítások blokkja.
End Function
Leállítja az eljárás definícióját.
Minden végrehajtható kódnak egy eljáráson belül kell lennie. Az egyes eljárásokat viszont osztályon, struktúrán vagy modulon belül deklarálják, amelyet az osztálynak, struktúrának vagy modulnak nevezünk.
Ha értéket szeretne visszaadni a hívó kódnak, használjon egy Function
eljárást, ellenkező esetben használjon egy Sub
eljárást.
Az eljárást csak a modul szintjén határozhatja meg Function
. Ezért a függvények deklarációs környezetének 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.
Function
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ókkal módosíthatja.
Az Function
eljárás deklarálhatja az eljárás által visszaadott érték adattípusát. Megadhat bármilyen adattípust vagy enumerálás nevét, struktúrát, osztályt vagy interfészt. Ha nem adja meg a paramétert returntype
, az eljárás ad vissza Object
.
Ha ez az eljárás a kulcsszót Implements
használja, az azt tartalmazó osztálynak vagy struktúrának is rendelkeznie kell egy Implements
utasítással, amely azonnal követi annak vagy Structure
utasításának a szövegétClass
. Az Implements
utasításnak tartalmaznia kell a megadott implementslist
összes felületet. Az interfész által definiált Function
névnek (in definedname
) azonban nem kell egyeznie az eljárás nevével (a következőben name
).
Megjegyzés
A lambda kifejezésekkel beágyazott függvénykifejezéseket definiálhat. További információ: Függvénykifejezések és Lambda-kifejezések.
Amikor az Function
eljárás visszatér a hívó kódhoz, a végrehajtás az eljárást meghívó utasítást követő utasítással folytatódik.
Ha egy függvényből szeretne értéket visszaadni, hozzárendelheti az értéket a függvény nevéhez, vagy belefoglalhatja egy Return
utasításba.
Az Return
utasítás egyszerre rendeli hozzá a visszatérési értéket, és kilép a függvényből az alábbi példában látható módon.
Function MyFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Az alábbi példa a függvény nevéhez myFunction
rendeli a visszatérési értéket, majd az utasítást használja a Exit Function
visszatéréshez.
Function MyFunction(ByVal j As Integer) As Double
MyFunction = 3.87 * j
Exit Function
End Function
Az Exit Function
és Return
az utasítások azonnali kilépést okoznak az Function
eljárásból. Tetszőleges számú Exit Function
és Return
utasítás jelenhet meg az eljárás bármely pontján, és keverheti és Return
megadhatja Exit Function
az utasításokat.
Ha érték name
hozzárendelése nélkül használjaExit Function
, az eljárás a megadott returntype
adattípus alapértelmezett értékét adja vissza. Ha returntype
nincs megadva, az eljárás visszaadja Nothing
az alapértelmezett értéket Object
.
Az eljárást az eljárásnév, majd az argumentumlista zárójelben, egy kifejezésben való meghívásával hívhatja Function
meg. Csak akkor hagyhatja ki a zárójeleket, ha nem ad meg argumentumokat. A kód azonban olvashatóbb, ha mindig tartalmazza a zárójeleket.
Az eljárást ugyanúgy hívhatja Function
meg, mint bármely kódtárfüggvényt, például Sqrt
: , Cos
vagy ChrW
.
Függvényeket a kulcsszó használatával Call
is meghívhat. Ebben az esetben a rendszer figyelmen kívül hagyja a visszatérési értéket. A kulcsszó használata a Call
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 nem szabad eljárást használni Function
aritmetikai kifejezésben, ha a függvény módosítja a változók értékét ugyanabban a kifejezésben.
Az Async funkció lehetővé teszi az aszinkron függvények meghívását explicit visszahívások nélkül, illetve a kód manuális felosztását több függvény vagy lambdakifejezés között.
Ha az Async módosítóval jelöl meg egy függvényt, használhatja a Várakozás operátort a függvényben. Amikor a vezérlőelem egy kifejezést ér el Await
a függvényben, a Async
vezérlő visszatér a hívóhoz, és a függvény 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 a függvényben.
Megjegyzés
Az Async
eljárás akkor tér vissza a hívóhoz, ha vagy az első várt objektummal találkozik, amely még nem fejeződött be, vagy az eljárás végéhez Async
ér, attól függően, hogy melyik következik be először.
A Async
függvények visszatérési Task<TResult> típusa vagy Task. Az alábbiakban egy olyan Async
függvényt mutatunk be, amely visszatérési típussal rendelkezik Task<TResult> .
Egy Async
függvény nem deklarálhat ByRef-paramétereket.
Az alutasítás a módosítóval Async
is megjelölhető. Ez elsősorban eseménykezelőkhöz használatos, 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 elkapni az Sub
eljárás által kidobott kivételeket.
További információ a függvényekről Async
: Aszinkron programozás az Async és a Await használatával, a folyamat szabályozása az Async Programokban és az Aszinkron visszatérési típusok.
Az iterátorfüggvények egyéni iterációt hajtanak végre egy gyűjteményen, például egy listán vagy tömbön. Az iterátorfüggvény a Hozam utasítással egyenként adja vissza az egyes elemeket. A hozamkimutatás elérésekor a kód aktuális helye meg lesz jegyezve. A végrehajtás a következő iterátorfüggvény meghívásakor indul újra erről a helyről.
Iterátort hívhat meg az ügyfélkódból egy Minden... Következő utasítás.
Az iterátorfüggvény visszatérési típusa lehet IEnumerable, IEnumerable<T>IEnumeratorvagy IEnumerator<T>.
További információ: Iterators.
Az alábbi példa az Function
utasítással deklarálja az eljárás törzsét Function
alkotó nevet, paramétereket és kódot. A ParamArray
módosító lehetővé teszi, hogy a függvény változó számú argumentumot fogadjon el.
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
Az alábbi példa meghívja az előző példában deklarált függvényt.
Module Module1
Sub Main()
' In the following function call, CalcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = CalcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = CalcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function CalcSum(ByVal ParamArray args() As Double) As Double
CalcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
CalcSum += args(i)
Next i
End Function
End Module
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
a 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. Ezt a következő állítás szemlélteti: 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
.NET -visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást: