Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Temsilciler, yöntemlere başvuran nesnelerdir. Diğer programlama dillerinde kullanılan işlev işaretçilerine benzer olduklarından, bazen tür açısından güvenli işlev işaretçileri olarak tanımlanırlar. Ancak işlev işaretçilerinden farklı olarak, Visual Basic temsilcileri sınıfını System.Delegatetemel alan bir başvuru türüdür. Temsilciler hem paylaşılan yöntemlere (sınıfın belirli bir örneği olmadan çağrılabilen yöntemler) hem de örnek yöntemlerine başvurabilir.
Temsilciler ve Olaylar
Temsilciler, çağıran yordam ile çağrılan yordam arasında bir aracıya ihtiyaç duyduğunuz durumlarda yararlıdır. Örneğin, olayları tetikleyen bir nesnenin farklı koşullar altında farklı olay işleyicilerini çağırabilmesini isteyebilirsiniz. Ne yazık ki olayları oluşturan nesne, belirli bir olayı hangi olay işleyicisinin işlediğinden önceden anlayamaz. Visual Basic, AddHandler
deyimini kullandığınızda sizin için otomatik olarak bir temsilci oluşturarak olay işleyicilerini olaylarla dinamik olarak ilişkilendirmenizi sağlar. Çalışma zamanında, temsilci çağrıları uygun olay işleyicisine iletir.
Kendi temsilcilerinizi oluşturabilmenize rağmen, çoğu durumda Visual Basic temsilciyi oluşturur ve ayrıntıları sizin yerinize halleder. Örneğin, bir Event
bildirimi, <EventName>EventHandler
ifadesini içeren sınıfın iç içe geçmiş bir sınıfı olarak, olayla aynı imzaya sahip olan ve Event
adı verilen bir temsilci sınıfını doğrudan belirler.
AddressOf
deyimi, belirli bir yordama başvuran bir temsilci örneğini örtük olarak oluşturur. Aşağıdaki iki kod satırı eşdeğerdir. İlk satırda, yönteme EventHandler
başvurusu bağımsız değişken olarak gönderilen bir Button1_Click
örneğinin açık bir şekilde oluşturulduğunu görürsünüz. İkinci satır da aynı şeyi yapmak için daha uygun bir yoldur.
AddHandler Button1.Click, New EventHandler(AddressOf Button1_Click)
' The following line of code is shorthand for the previous line.
AddHandler Button1.Click, AddressOf Me.Button1_Click
Derleyicinin temsilcinin türünü bağlama göre belirleyebileceği her yerde temsilci oluşturmanın kısa yolunu kullanabilirsiniz.
Mevcut Temsilci Türünü Kullanan Olayları Bildirme
Bazı durumlarda, var olan bir temsilci türünü altındaki temsilci olarak kullanmak üzere bir olay bildirmek isteyebilirsiniz. Aşağıdaki söz diziminde nasıl yapıldığını gösterilmektedir:
Delegate Sub DelegateType()
Event AnEvent As DelegateType
Bu, birden çok olayı aynı işleyiciye yönlendirmek istediğinizde kullanışlıdır.
Değişkenleri ve Parametreleri Temsilci Olarak Atama
Serbest iş parçacığı oluşturma gibi olayla ilgili olmayan diğer görevler için veya çalışma zamanında işlevlerin farklı sürümlerini çağırması gereken yordamlarla temsilciler kullanabilirsiniz.
Örneğin, araba adlarını içeren bir liste kutusu içeren bir sınıflandırılmış reklam uygulamanız olduğunu varsayalım. Reklamlar, normalde otomobilin markası olan başlığa göre sıralanır. Bazı otomobiller, otomobilin markasından önceki yılını içerdiğinde karşılaşabileceğiniz bir sorun oluşur. Sorun, liste kutusunun yerleşik sıralama işlevinin yalnızca karakter kodlarına göre sıralanmış olmasıdır; önce tarihlerle başlayan tüm reklamları, ardından da make ile başlayan reklamları yerleştirir.
Bunu düzeltmek için, çoğu liste kutusunda standart alfabetik sıralamayı kullanan, ancak çalışma zamanında araba reklamları için özel sıralama yordamına geçebilen bir sınıfta sıralama yordamı oluşturabilirsiniz. Bu işlemi yapmak için, özel sıralama yordamını çalışma zamanında temsilciler aracılığıyla sıralama sınıfına geçirirsiniz.
AddressOf ve Lambda İfadeleri
Her temsilci sınıfı, bir nesne yönteminin belirtimini geçirilen bir oluşturucu tanımlar. Temsilci oluşturucuya yönelik bağımsız değişken, bir yönteme veya lambda ifadesine başvuru olmalıdır.
Bir yönteme başvuru belirtmek için aşağıdaki söz dizimini kullanın:
AddressOf
[expression
.]methodName
derleme zamanı türü expression
, bir sınıfın adı veya imzası temsilci sınıfının imzası ile eşleşen belirtilen adın yöntemini içeren bir arabirim olmalıdır.
methodName
paylaşılan bir yöntem veya örnek yöntemi olabilir.
methodName
sınıfının varsayılan yöntemi için bir temsilci oluştursanız bile isteğe bağlı değildir.
Lambda ifadesi belirtmek için aşağıdaki söz dizimini kullanın:
Function
([parm
Olarak type
, parm2
Olarak type2
, ...]) expression
Aşağıdaki örnekte, bir temsilcinin başvurusunu belirtmek için hem AddressOf
hem de lambda ifadelerinin kullanımı gösterilmektedir.
Module Module1
Sub Main()
' Create an instance of InOrderClass and assign values to the properties.
' InOrderClass method ShowInOrder displays the numbers in ascending
' or descending order, depending on the comparison method you specify.
Dim inOrder As New InOrderClass
inOrder.Num1 = 5
inOrder.Num2 = 4
' Use AddressOf to send a reference to the comparison function you want
' to use.
inOrder.ShowInOrder(AddressOf GreaterThan)
inOrder.ShowInOrder(AddressOf LessThan)
' Use lambda expressions to do the same thing.
inOrder.ShowInOrder(Function(m, n) m > n)
inOrder.ShowInOrder(Function(m, n) m < n)
End Sub
Function GreaterThan(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
Return num1 > num2
End Function
Function LessThan(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
Return num1 < num2
End Function
Class InOrderClass
' Define the delegate function for the comparisons.
Delegate Function CompareNumbers(ByVal num1 As Integer, ByVal num2 As Integer) As Boolean
' Display properties in ascending or descending order.
Sub ShowInOrder(ByVal compare As CompareNumbers)
If compare(_num1, _num2) Then
Console.WriteLine(_num1 & " " & _num2)
Else
Console.WriteLine(_num2 & " " & _num1)
End If
End Sub
Private _num1 As Integer
Property Num1() As Integer
Get
Return _num1
End Get
Set(ByVal value As Integer)
_num1 = value
End Set
End Property
Private _num2 As Integer
Property Num2() As Integer
Get
Return _num2
End Get
Set(ByVal value As Integer)
_num2 = value
End Set
End Property
End Class
End Module
İşlevin imzası, temsilci türüyle uyumlu olmalıdır. Lambda ifadeleri hakkında daha fazla bilgi için bkz. Lambda İfadeleri. Lambda ifadesi ve AddressOf
temsilci atamalarına daha fazla örnek için bkz. Gevşek Temsilci Dönüştürme.
İlgili Konular
Başlık | Açıklama |
---|---|
Nasıl yapılır: Temsilci Yöntemi Çağırma | Bir yöntemin temsilciyle nasıl ilişkilendirildiğini ve ardından temsilci aracılığıyla bu yöntemin nasıl çağrıldığını gösteren bir örnek sağlar. |
Nasıl yapılır: Visual Basic'te Yordamları Başka Bir Yordama Geçirme | Bir yordamı başka bir yordama geçirmek için temsilcilerin nasıl kullanılacağını gösterir. |
Esnek Delege Dönüştürme | İmzaları aynı olmasa bile temsilcilere veya işleyicilere nasıl alt öğeler ve işlevler atayabileceğinizi açıklar |
Etkinlikler | Visual Basic'teki olaylara genel bir bakış sağlar. |