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:
MustOverride Overrides
NotOverridable Overrides
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 olarakNew
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 interface
tanı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 Implements
implementslist
belirtilen 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.
Async
Sub
yordamlar öncelikli olarak bir değerin döndürülemez olduğu olay işleyicileri için kullanılır. Bir Async
Sub
yordam beklenemez ve bir Async
Sub
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 Async
Function
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 Await
DoSomethingAsync
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 DoSomethingAsync
Async
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_Click
Sub
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