Visual Basic'de Genel Yordamlar

Genel yöntem olarak da adlandırılan genel yordam, en az bir tür parametresiyle tanımlanan bir yordamdır. Bu, çağıran kodun, yordamı her çağırışında veri türlerini kendi gereksinimlerine göre uyarlamasını sağlar.

Yordam, yalnızca genel bir sınıf veya genel bir yapı içinde tanımlanma özelliğiyle genel değildir. Genel olması için, yordamın gerekebilecek normal parametrelere ek olarak en az bir tür parametresi alması gerekir. Genel bir sınıf veya yapı, genel olmayan yordamlar içerebilir ve genel olmayan bir sınıf, yapı veya modül genel yordamlar içerebilir.

Genel bir yordam, tür parametrelerini normal parametre listesinde, dönüş türünde varsa ve yordam kodunda kullanabilir.

Tür Çıkarma

Herhangi bir tür bağımsız değişkeni sağlamadan genel bir yordam çağırabilirsiniz. Bu şekilde çağırırsanız, derleyici yordamın tür bağımsız değişkenlerine geçirmek için uygun veri türlerini belirlemeye çalışır. Buna tür çıkarımı denir. Aşağıdaki kod, derleyicinin tür parametresine ttür String geçirmesi gerektiğini çıkardığı bir çağrıyı gösterir.

Public Sub testSub(Of t)(ByVal arg As t)
End Sub
Public Sub callTestSub()
    testSub("Use this string")
End Sub

Derleyici, tür bağımsız değişkenlerini çağrınızın bağlamından çıkaramıyorsa bir hata bildirir. Böyle bir hatanın olası nedenlerinden biri dizi sıralaması uyuşmazlığıdır. Örneğin, normal bir parametreyi tür parametresi dizisi olarak tanımladığınız varsayın. Farklı bir dereceye (boyut sayısı) sahip bir dizi sağlayan genel yordamı çağırırsanız, uyuşmazlık tür çıkarımının başarısız olmasına neden olur. Aşağıdaki kod, iki boyutlu bir dizinin tek boyutlu bir dizi bekleyen bir yordama geçirildiği bir çağrıyı gösterir.

Public Sub demoSub(Of t)(ByVal arg() As t)
End Sub

Public Sub callDemoSub()
    Dim twoDimensions(,) As Integer
    demoSub(twoDimensions)
End Sub

Tür çıkarımı yalnızca tüm tür bağımsız değişkenlerini atlayarak çağırabilirsiniz. Tek bir tür bağımsız değişken sağladığınızda, bunların tümünü sağlamanız gerekir.

Tür çıkarımı yalnızca genel yordamlar için desteklenir. Genel sınıflarda, yapılarda, arabirimlerde veya temsilcilerde tür çıkarımı çağıramazsınız.

Örnek

Açıklama

Aşağıdaki örnek, dizideki belirli bir öğeyi bulmak için genel Function bir yordam tanımlar. Bir tür parametresi tanımlar ve parametre listesindeki iki parametreyi oluşturmak için bunu kullanır.

Kod

Public Function findElement(Of T As IComparable) (
        ByVal searchArray As T(), ByVal searchValue As T) As Integer

    If searchArray.GetLength(0) > 0 Then
        For i As Integer = 0 To searchArray.GetUpperBound(0)
            If searchArray(i).CompareTo(searchValue) = 0 Then Return i
        Next i
    End If

    Return -1
End Function

Açıklamalar

Yukarıdaki örnek, öğesinin her öğesiyle searchArraykarşılaştırma searchValue yapabilmeyi gerektirir. Bu özelliği garanti etmek için, arabirimi uygulamak için tür parametresini T kısıtlar IComparable<T> . için sağlanan T bir tür bağımsız değişkeninin işlecini desteklediğinin == garantisi olmadığından kod işleci yerine yöntemini kullanırCompareTo.

Yordamı aşağıdaki kodla test findElement edebilirsiniz.

Public Sub tryFindElement()
    Dim stringArray() As String = {"abc", "def", "xyz"}
    Dim stringSearch As String = "abc"
    Dim integerArray() As Integer = {7, 8, 9}
    Dim integerSearch As Integer = 8
    Dim dateArray() As Date = {#4/17/1969#, #9/20/1998#, #5/31/2004#}
    Dim dateSearch As Date = Microsoft.VisualBasic.DateAndTime.Today
    MsgBox(CStr(findElement(Of String)(stringArray, stringSearch)))
    MsgBox(CStr(findElement(Of Integer)(integerArray, integerSearch)))
    MsgBox(CStr(findElement(Of Date)(dateArray, dateSearch)))
End Sub

Yukarıdaki çağrılarda MsgBox sırasıyla "0", "1" ve "-1" görüntülenir.

Ayrıca bkz.