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.
Syntax
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Részek
attributelistOpcionális. Lásd: Attribútumlista.
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.
IteratorOpcionális. Lásd : Iterator.
nameSzükséges. Az eljárás neve. Lásd: Deklarált elemnevek.
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.
returntypeHa igen, akkor
Option StrictkötelezőOnmegadni. Az eljárás által visszaadott érték adattípusa.ImplementsOpcionális. Azt jelzi, hogy ez az eljárás egy vagy több
Functioneljá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.FunctionA 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ás során végrehajtandó utasítások blokkja.
End FunctionLeá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. 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.
Függvény definiálása
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 Class utasításának a szövegétStructure. 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).
Feljegyzé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.
Visszatérés függvényből
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 Exit Function megadhatja Return az utasításokat.
Ha érték Exit Functionhozzárendelése nélkül használjaname, az eljárás a megadott returntypeadattípus alapértelmezett értékét adja vissza. Ha returntype nincs megadva, az eljárás visszaadja Nothingaz alapértelmezett értéket Object.
Függvény meghívása
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: , Cosvagy 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.
Async Functions
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.
Feljegyzé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 AsyncSub eljárás nem várható meg, és az eljárás hívója AsyncSub 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.
Iterátorfüggvények
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.
1. példa
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
2. példa
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
3. 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 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_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