Sub Deyimi (Visual Basic)

Bir yordamı tanımlayan adı, parametreleri ve kodu bildirir Sub .

Syntax

[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Sub ]
    [ statements ]
End Sub

Bölümler

  • attributelist

    İsteğe bağlı. Bkz. öznitelik listesi.

  • Partial

    İsteğe bağlı. Kısmi bir yöntemin tanımını gösterir. Bkz. kısmi Yöntemler.

  • accessmodifier

    İsteğe bağlı. Aşağıdakilerden biri olabilir:

    Visual Basic erişim düzeylerinebakın.

  • proceduremodifiers

    İsteğe bağlı. Aşağıdakilerden biri olabilir:

  • Shared

    İsteğe bağlı. Bkz. paylaşılan.

  • Shadows

    İsteğe bağlı. Bkz. gölgeler.

  • Async

    İsteğe bağlı. Bkz. zaman uyumsuz.

  • name

    Gereklidir. Yordamın adı. Bkz. tanımlanmış öğe adları. Bir sınıf için bir Oluşturucu yordamı oluşturmak için, bir Sub yordamın adını New anahtar sözcüğe ayarlayın. Daha fazla bilgi için bkz. nesne ömrü: nesneleri oluşturma ve yok etme.

  • typeparamlist

    İsteğe bağlı. Genel bir yordamın tür parametrelerinin listesi. Bkz. tür listesi.

  • parameterlist

    İsteğe bağlı. Bu yordamın parametrelerini temsil eden yerel değişken adlarının listesi. Bkz. parametre listesi.

  • Implements

    İsteğe bağlı. Bu yordamın Sub , her biri bu yordamın kapsayan sınıf veya yapı tarafından uygulanan bir arabirimde tanımlanan bir veya daha fazla yordam uyguladığını gösterir. Bkz. Implements açıklaması.

  • implementslist

    Sağlanırsa gereklidir Implements . SubUygulanan yordamların listesi.

    implementedprocedure [ , implementedprocedure ... ]

    Her birinin implementedprocedure aşağıdaki söz dizimi ve parçaları vardır:

    interface.definedname

    Bölüm Description
    interface Gereklidir. Bu yordamın kapsayan sınıf veya yapı tarafından uygulanan bir arabirimin adı.
    definedname Gereklidir. Yordamın tanımlandığı ad interface .
  • Handles

    İsteğe bağlı. Bu yordamın bir veya daha fazla belirli olayı işleyebileceğini belirtir. Bkz. işleyiciler.

  • eventlist

    Sağlanırsa gereklidir Handles . Bu yordamın işleyeceği olayların listesi.

    eventspecifier [ , eventspecifier ... ]

    Her birinin eventspecifier aşağıdaki söz dizimi ve parçaları vardır:

    eventvariable.event

    Bölüm Description
    eventvariable Gereklidir. Olayı oluşturan sınıfın veya yapının veri türüyle belirtilen nesne değişkeni.
    event Gereklidir. Bu yordamın işleyeceği olayın adı.
  • statements

    İsteğe bağlı. Bu yordam içinde çalıştırılacak deyimler bloğu.

  • End Sub

    Bu yordamın tanımını sonlandırır.

Açıklamalar

Tüm yürütülebilir kodların bir yordamın içinde olması gerekir. SubÇağırma koduna bir değer döndürmek istemediğinizde bir yordam kullanın. Bir Function değer döndürmek istediğinizde bir yordam kullanın.

Bir alt yordam tanımlama

Bir Sub yordamı yalnızca modül düzeyinde tanımlayabilirsiniz. Bir alt yordamın bildirim bağlamı, bu nedenle bir sınıf, yapı, modül veya arabirim olmalıdır ve kaynak dosya, bir ad alanı, yordam veya bir blok olamaz. Daha fazla bilgi için bkz. bildirim bağlamları ve varsayılan erişim düzeyleri.

Sub yordamlar, genel erişim için varsayılan olarak. Erişim değiştiricilerini kullanarak erişim düzeylerini ayarlayabilirsiniz.

Yordam Implements anahtar sözcüğünü kullanıyorsa, kapsayan sınıf veya yapının, Implements veya ifadesiyle hemen sonraki bir deyime sahip olması gerekir Class Structure . Implementsİfadesinin içinde belirtilen her arabirimi içermesi gerekir implementslist . Ancak, bir arabirimin Sub (içinde) tanımladığı adın definedname Bu yordamın adıyla eşleşmesi gerekmez (içinde name ).

Bir alt yordamdan dönme

Bir Sub yordam çağıran koda döndüğünde, yürütme onu çağıran deyimden sonra ifadesiyle devam eder.

Aşağıdaki örnek bir yordamdan bir dönüş gösterir Sub .

Sub mySub(ByVal q As String)
    Return
End Sub

Exit SubVe Return deyimleri, bir yordamdan hemen çıkılmasına neden olur Sub . Herhangi bir sayıda Exit Sub ve Return deyimi yordamda herhangi bir yerde görünebilir ve Exit Sub ve deyimlerini karıştırabilirsiniz Return .

Bir alt yordamı çağırma

SubBir deyimindeki yordam adını kullanarak bir yordamı çağırır ve ardından bu adı parantez içindeki bağımsız değişken listesiyle takip edersiniz. Parantezleri yalnızca herhangi bir bağımsız değişken belirtmezseniz atlayabilirsiniz. Ancak, her zaman parantezleri eklerseniz kodunuz daha okunabilir.

Bir Sub yordam ve Function yordam parametrelere sahip olabilir ve bir dizi deyim gerçekleştirebilir. Ancak, bir Function yordam bir değer döndürür ve bir Sub yordam değildir. Bu nedenle, bir ifadede bir Sub yordam kullanamazsınız.

CallBir yordamı çağırdığınızda anahtar sözcüğünü kullanabilirsiniz Sub , ancak bu anahtar sözcük çoğu kullanımlar için önerilmez. Daha fazla bilgi için bkz. Call deyimleri.

Visual Basic bazen, iç verimliliği artırmak için aritmetik ifadeleri yeniden düzenler. Bu nedenle, bağımsız değişken listeniz diğer yordamları çağıran ifadeler içeriyorsa, bu ifadelerin belirli bir sırada çağrılacağını varsaymamalıdır.

Zaman uyumsuz alt yordamlar

Async özelliğini kullanarak, zaman uyumsuz işlevleri açık geri çağırmaları kullanmadan çağırabilir veya kodunuzu birden çok işlev veya lambda ifadesine el ile böedebilirsiniz.

Bir yordamı zaman uyumsuz değiştiriciyle işaretlerseniz, yordamda await işlecini kullanabilirsiniz. Denetim, yordamda bir Await ifadeye ulaştığında Async Denetim çağırana döner ve beklenen görev tamamlanana kadar yordamdaki ilerleme durumu askıya alınır. Görev tamamlandığında, yürütme yordamda çalışmaya çalışabilir.

Not

Bir Async yordam, henüz tamamlanmamış olan ilk bekleme nesnesine rastlandı veya Async yordamın sonuna ulaşıldığında, hangisi önce gerçekleşirse çağıran öğesine geri döner.

Değiştirici ile bir Işlev ifadesini de işaretleyebilirsiniz Async . Bir Async işlev, veya dönüş türüne sahip olabilir Task<TResult> Task . Bu konunun ilerleyen kısımlarında yer alan bir örnek Async , dönüş türü olan bir işlevi gösterir Task<TResult> .

Async``Subyordamlar öncelikle bir değer döndürülmediğinde olay işleyicileri için kullanılır. Bir yordam beklenemez Async Sub ve bir yordamın çağıranı Async Sub yordamın aldığı özel durumları yakalayamaz Sub .

Bir Async yordam ByRef parametreleri bildiremez.

yordamlar hakkında daha fazla bilgi için Async bkz. async ve Await ile zaman uyumsuz programlama, zaman uyumsuz programlarda denetim Flowve zaman uyumsuz dönüş türleri.

Örnek 1

Aşağıdaki örnek, Sub bir yordamın gövdesini oluşturan adı, parametreleri ve kodu tanımlamak için ifadesini kullanır Sub .

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

Örnek 2

Aşağıdaki örnekte, DelayAsync Async Function öğesinin dönüş türü olan bir Task<TResult> . DelayAsync , Return bir tamsayı döndüren bir ifadeye sahiptir. Bu nedenle, öğesinin işlev bildirimi DelayAsync bir dönüş türüne sahip olmalıdır Task(Of Integer) . Dönüş türü olduğu için Task(Of Integer) , Await içindeki ifadesinin değerlendirmesi DoSomethingAsync bir tamsayı oluşturur, çünkü aşağıdaki deyim şunu gösterir: Dim result As Integer = Await delayTask .

startButton_ClickYordam bir Async Sub yordam örneğidir. DoSomethingAsyncBir işlev olduğundan Async , DoSomethingAsync Aşağıdaki ifadede gösterildiği gibi çağrının görevi beklenmelidir: Await DoSomethingAsync() . startButton_Click Sub Bir ifadesi içerdiğinden yordamın değiştirici ile tanımlanması gerekir Async Await .

' 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

Ayrıca bkz.