Sub Deyimi (Visual Basic)

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

Sözdizimi

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

Parça

  • attributelist

    isteğe bağlı. Bkz. Öznitelik Listesi.

  • Partial

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

  • accessmodifier

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

    Bkz. Visual Basic'te erişim düzeyleri.

  • proceduremodifiers

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

  • Shared

    isteğe bağlı. Bkz. Paylaşılan.

  • Shadows

    isteğe bağlı. Bkz. Gölgeler.

  • Async

    isteğe bağlı. Bkz. Zaman Uyumsuz.

  • name

    Gerekli. Yordamın adı. Bkz. Bildirilen Öğe Adları. Bir sınıf için oluşturucu yordamı oluşturmak için, bir Sub yordamın adını anahtar sözcük olarak New ayarlayın. Daha fazla bilgi için bkz . Nesne Ömrü: Nesneler Nasıl Oluşturulur ve Yok Edilir.

  • typeparamlist

    isteğe bağlı. Genel yordam için tür parametrelerinin listesi. Bkz. Tür Listesi.

  • parameterlist

    isteğe bağlı. Bu yordamın parametrelerini temsil eden yerel değişken adlarının listesi. Bkz. Parametre Listesi.

  • Implements

    isteğe bağlı. Bu yordamın, her biri bu yordamın içeren sınıfı veya yapısı tarafından uygulanan bir arabirimde tanımlanan bir veya daha fazla Sub yordam uyguladığını gösterir. Bkz . Implements Deyimi.

  • implementslist

    Sağlanırsa Implements gereklidir. Sub Uygulanan yordamların listesi.

    implementedprocedure [ , implementedprocedure ... ]

    Her implementedprocedure birinin söz dizimi ve bölümleri vardır:

    interface.definedname

    Bölüm Açıklama
    interface Gerekli. Bu yordamın içeren sınıfı veya yapısı tarafından uygulanan arabirimin adı.
    definedname Gerekli. Yordamın içinde interfacetanımlandığı ad.
  • Handles

    isteğe bağlı. Bu yordamın belirli bir veya daha fazla olayı işleyebileceğini gösterir. Bkz. Tanıtıcılar.

  • eventlist

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

    eventspecifier [ , eventspecifier ... ]

    Her eventspecifier birinin söz dizimi ve bölümleri vardır:

    eventvariable.event

    Bölüm Açıklama
    eventvariable Gerekli. Nesne değişkeni, olayı oluşturan sınıfın veya yapının veri türüyle bildirildi.
    event Gerekli. Bu yordamın işlediği olayın adı.
  • statements

    isteğe bağlı. Bu yordam içinde çalıştırılacak deyim bloğu.

  • End Sub

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

Açıklamalar

Tüm yürütülebilir kod bir yordam içinde olmalıdır. Sub Çağıran koda bir değer döndürmek istemediğinizde bir yordam kullanın. Bir değer döndürmek istediğinizde bir Function yordam kullanın.

Alt Yordam Tanımlama

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

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

Yordam anahtar sözcüğünü Implements kullanıyorsa, içeren sınıf veya yapı hemen veya Structure deyimini Class izleyen bir Implements deyimine sahip olmalıdır. deyiminde Implementsimplementslistbelirtilen her arabirimi içermelidir. Ancak, arabirimin tanımladığı adın Sub (içinde definedname) bu yordamın adıyla (içinde name) eşleşmesi gerekmez.

Alt Yordamdan Dönme

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

Aşağıdaki örnekte bir yordamdan Sub bir dönüş gösterilmektedir.

Sub mySub(ByVal q As String)
    Return
End Sub

Exit Sub ve Return deyimleri bir yordamdan Sub hemen çıkışa neden olur. Yordamın herhangi bir yerinde herhangi bir Exit Sub sayıda ve Return deyimi görüntülenebilir ve ve Return deyimlerini karıştırabilirsinizExit Sub.

Alt Yordam Çağırma

Bir Sub deyiminde yordam adını kullanarak ve sonra parantez içinde bağımsız değişken listesiyle bu adı izleyerek bir yordamı çağırırsınız. Parantezleri atlayabilirsiniz, ancak herhangi bir bağımsız değişken sağlamazsanız. Ancak, parantezleri her zaman eklerseniz kodunuz daha okunabilir olur.

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

Bir Sub yordamı çağırırken anahtar sözcüğünü Call kullanabilirsiniz, ancak çoğu kullanım için bu anahtar sözcük önerilmez. Daha fazla bilgi için bkz . Arama Deyimi.

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

Zaman Uyumsuz Alt Yordamlar

Zaman Uyumsuz özelliğini kullanarak, açık geri çağırmalar kullanmadan veya kodunuzu birden çok işleve veya lambda ifadesine el ile bölmeden zaman uyumsuz işlevleri çağırabilirsiniz.

Bir yordamı Zaman Uyumsuz değiştirici ile işaretlerseniz, yordamda Await işlecini kullanabilirsiniz. Denetim yordamdaki Async bir Await ifadeye ulaştığında, denetim çağırana geri döner ve yordamdaki ilerleme, beklenen görev tamamlanana kadar askıya alınır. Görev tamamlandığında, yürütme yordamda devam edebilir.

Not

Yordam Async , henüz tamamlanmamış ilk beklenen nesneyle karşılaşıldığında veya yordamın Async sonuna ulaşıldığında (hangisi önce gerçekleşirse) çağırana geri döner.

İşlev Deyimini değiştirici ile Async de işaretleyebilirsiniz. İşlevin Async dönüş türü Task<TResult> veya Taskolabilir. Bu konunun devamında yer alan bir Async örnek, dönüş türü Task<TResult>olan bir işlevi gösterir.

AsyncSub yordamlar öncelikli olarak bir değerin döndürülemez olduğu olay işleyicileri için kullanılır. Bir AsyncSub yordam beklenemez ve bir AsyncSub yordamın çağıranı, yordamın Sub attığı özel durumları yakalayamaz.

Bir Async yordam herhangi bir ByRef parametresi bildiremez.

Yordamlar hakkında Async daha fazla bilgi için bkz . Async ve Await ile Zaman Uyumsuz Programlama, Zaman Uyumsuz Programlarda Denetim Akışı ve Zaman Uyumsuz Dönüş Türleri.

Örnek 1

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

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 dönüş türü olan bir AsyncFunction değeridir Task<TResult>. DelayAsync tamsayı döndüren bir Return deyime sahiptir. Bu nedenle, işlev bildiriminin DelayAsync dönüş türü Task(Of Integer)olmalıdır. Dönüş türü olduğundan Task(Of Integer), içindeki ifadenin AwaitDoSomethingAsync değerlendirilmesi, aşağıdaki deyimde gösterildiği gibi bir tamsayı oluşturur: Dim result As Integer = Await delayTask.

Yordam startButton_Click , bir Async Sub yordam örneğidir. Bir DoSomethingAsyncAsync işlev olduğundan, aşağıdaki deyimde gösterildiği gibi çağrısının DoSomethingAsync görevi beklenmelidir: Await DoSomethingAsync(). bir startButton_ClickSub ifadeye sahip Await olduğundan yordamın Async değiştirici ile tanımlanması gerekir.

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