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


Függvényutasítás (Visual Basic)

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

  • 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:

  • 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ő Onmegadni. 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ó 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ás során végrehajtandó utasítások blokkja.

  • End Function

    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. 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 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).

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 Return megadhatja Exit Function az utasításokat.

Ha érték namehozzárendelése nélkül használjaExit Function, 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 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.

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 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 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

Lásd még