Temsilciler (Visual Basic)
Temsilciler yöntemlere başvuran nesneleridir.Bunlar bazen olarak açıklanan denkliği işlev işaretçileri diğer programlama dillerinde kullanılan işlev işaretçileri benzer oldukları için.Ancak işlev işaretçileri, aksine Visual Basic Temsilciler sınıfını esas bir başvuru türü olan Delegate.Paylaşılan her iki yöntem de Temsilciler başvuru — bir sınıfın belirli bir örneği çağrılabilecek yöntemleri — ve örnek yöntemleri.
Temsilciler ve Olaylar
Temsilciler, GetTypeId yordamını ve çağrılan yordam arasında bir aracı gereken durumlarda kullanışlıdır.Örneğin, farklı koşullarda farklı olay işleyicileri çağıran yapabilmek için olayları başlatan nesne isteyebilirsiniz.Ne yazık ki, olayları hangi olay işleyicisi önceden bilemezsiniz yükseltme nesne belirli bir olay işleme olduğunu.Visual Basickullandığınızda, sizin için bir temsilci oluşturarak olaylarla ilişkilendirmek dinamik olarak olay işleyicileri sağlar AddHandler ifadesi.Çalışma zamanında, uygun olay işleyici çağrılarını temsilci iletir.
Ancak, çoğu zaman kendi Temsilciler oluşturabilirsiniz Visual Basic temsilci oluşturur ve sürer ayrıntılarını sizin yerinize yapar.Örneğin, bir Event deyimi örtülü olarak tanımlayan adında bir temsilci sınıfı <EventName>EventHandler sınıfını içeren iç içe geçmiş bir sınıf olarak Event deyimi ve olay ile aynı imza.AddressOf Deyimi örtülü olarak belirli bir yordamı başvuran bir temsilci örneğini oluşturur.Aşağıdaki iki kod satırı eşdeğerdir.Açık bir örneğinin oluşturulmasını gördüğünüz ilk satırda Eventhandler, başvuru yöntemi ile Button1_Click bağımsız değişken olarak gönderilir.İkinci satır, 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
Steno kullandığınız derleyici herhangi bir temsilci oluşturma yolu kapsamında temsilcinin türünü belirleyebilir.
Varolan bir temsilci türü olayları bildirme
Bazı durumlarda, varolan bir temsilci türü, temeldeki temsilci olarak kullanmak için bir olay bildirmek isteyebilirsiniz.Aşağıdaki sözdizimini gösterir nasıl:
Delegate Sub DelegateType()
Event AnEvent As DelegateType
Birden çok olay aynı işleyiciye yönlendirilmesini istediğiniz zaman yararlıdır.
Temsilci değişkenleri ve parametreleri
Olay dışı görevleri, boş iş parçacığı gibi veya çalışma zamanında farklı sürümlerini işlevleri çağırmak için gereken yordamları ile ilgili diğer için temsilciler kullanabilirsiniz;
Örneğin, otomobiller adları ile bir liste kutusu içeren bir sınıflandırılmış ad uygulama olduğunu varsayalım.Ads normalde araba markası olan başlığa göre sıralanır.Araba yap önce yılın bazı otomobilleri dahil yüz bir sorun oluşur.Liste kutusunun yerleşik sıralama işlevselliği yalnızca karakter kodlarını göre sıralar sorunudur; Başlangıç tarihi ile ilk kez, reklam yapma ile başlayan ve ardından tüm reklamlar yerleştirir.
Bu sorunu gidermek için çoğu liste kutuları standart alfabetik sıralama kullanır ancak otomobil reklamları özel sıralama prosedürü zamanında geçmek mümkün olan bir sınıfta bir sıralama yordam oluşturabilirsiniz.Bunu yapmak için özel sıralama yordamını sıralama sınıfına çalışma zamanında Temsilciler kullanarak geçirin.
AddressOf ve Lambda ifadeleri
Nesne yöntemi tayini geçirilen bir kurucu her temsilci sınıfı tanımlar.Bir bağımsız değişken için bir temsilci oluşturucuda bir yöntem ya da lambda ifade başvuru olması gerekir.
Başvuru yöntemi belirlemek için aşağıdaki sözdizimini kullanın:
AddressOf [expression.]methodName
Derleme zamanı tür expression bir sınıf veya belirtilen ad, imza imzası temsilci sınıfının eşleşen bir yöntemi içeren bir arabirim adı olmalıdır.methodName Paylaşılan bir yöntem veya bir oluşum yöntemi olabilir.methodName Sınıfının varsayılan yöntemi için bir temsilci yaratma bile isteğe bağlı değildir.
Lambda ifade belirtmek için aşağıdaki sözdizimini kullanın:
Function(parm As type, parm2 As type2, ...])expression
Aşağıdaki örnek, her ikisi de gösterir AddressOf ve lambda ifadeleri başvuru için bir temsilci belirtmek için kullanılır.
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
İşlev imzası temsilci türüyle eşleşmelidir.Lambda ifadeleri hakkında daha fazla bilgi için bkz: Lambda İfadeleri (Visual Basic).Lambda ifadesi daha fazla örnek için ve AddressOf Temsilciler, atamaları görmek Gevşek Temsilci Dönüşümü (Visual Basic).
İlgili Konular
Başlık |
Description |
---|---|
Nasıl bir yöntem bir temsilci ile ilişkilendirmek ve temsilci aracılığıyla bu yöntemi çağırmak gösteren bir örnek sağlar. |
|
Nasıl yapılır: Visual Basic'de Başka Bir Yordama Yordam Geçirme |
Başka bir yordam için bir yordam geçirmek için temsilciler kullanımı gösterilmiştir. |
Hatta kendi imzaları aynı değil, nasıl altyordam ve işlevleri Temsilciler veya işleyicileri atamak için açıklar |
|
Visual Basic olay genel bakış sağlar. |