Aracılığıyla paylaş


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 System.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 ifadeleri (Visual Basic).Lambda ifadesi daha fazla örnek için ve AddressOf Temsilciler, atamaları görmek Gevşek temsilci dönüştürme (Visual Basic).

İlgili Konular

Başlık

Description

Nasıl yapılır: Delegate yöntemi (Visual Basic) çağırma

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: başka bir yordamına Visual Basic yordamları geçmesi

Başka bir yordam için bir yordam geçirmek için temsilciler kullanımı gösterilmiştir.

Gevşek temsilci dönüştürme (Visual Basic)

Hatta kendi imzaları aynı değil, nasıl altyordam ve işlevleri Temsilciler veya işleyicileri atamak için açıklar

Olayları (Visual Basic)

Visual Basic olay genel bakış sağlar.