Aracılığıyla paylaş


Visual Basic'te 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 Çıkarımı

Herhangi bir tür bağımsız değişkeni sağlamadan genel bir yordam çağırabilirsiniz. Bu şekilde çağırırsanız, derleyici prosedürü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 String türünü t tür parametresine geçirmesi gerektiğini çıkardığını gösteren 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, çağrınızın bağlamından tür bağımsız değişkenlerini çıkaramıyorsa hata mesajı verir. 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ını yalnızca tüm tür bağımsız değişkenlerini çıkararak kullanabilirsiniz. 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

Yorumlar

Önceki örnek, searchValue öğesini, searchArray öğesinin her bir öğesiyle karşılaştırabilme yeteneğini gerektirir. Bu yeteneği garanti etmek için, T tür parametresini IComparable<T> arabirimini uygulayacak şekilde kısıtlar. Kod, CompareTo için sağlanan tür bağımsız değişkeninin = işleci desteklediğine dair bir garanti olmadığından, T işleci yerine = yöntemini kullanır.

Aşağıdaki kodla findElement yordamını test 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 bakınız