Procedury ogólne w Visual Basic

A Ogólne procedury, nazywany również metody rodzajowej, jest to procedura zdefiniowany z co najmniej jeden typ parametru.Dzięki temu kod wywołujący dostosować typy danych do swoich wymagań przy każdym wywołuje procedurę.

Procedura nie jest rodzajowa po prostu z racji definiowanego wewnątrz klasą rodzajową lub Struktura rodzajowa.Być rodzajowy, procedura musi podjąć co najmniej jednego parametru typu oprócz normalnych parametry, które może zająć.Rodzajowy klasy lub struktury mogą zawierać procedury nierodzajowe i nierodzajowe klasy, struktury, lub moduł może zawierać procedury rodzajowy.

Ogólne procedury można użyć jej parametry typu na liście jego normalnej parametr w jego typ zwracany, jeśli kod jednego i jej procedury.

Wnioskowanie typu

Ogólne procedury można wywołać bez podawania żadnych argumentów typu w ogóle.Jeśli zadzwonisz go w ten sposób kompilator próbuje określić typy odpowiednie dane przekazywane do procedury argumentów typu.Jest to tak zwane typu wnioskowanie.Poniższy kod zawiera wywołanie, w którym kompilator ustali, że należy przekazać typu String do parametru typu t.

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

Jeśli kompilator nie można wywnioskować argumentów typu z kontekstu Rozmowa, zgłasza błąd.Jedną z możliwych przyczyn takiego błędu jest niezgodność rangi tablicy.Załóżmy na przykład zdefiniować parametr normalnej jako tablica parametru typu.Dostarczanie na tablicę rangi różnych (liczba wymiarów), jeśli wywołanie procedury rodzajowy niezgodność powoduje wnioskowanie typu niepowodzenie.Poniższy kod zawiera wywołanie, w którym dwuwymiarowej tablicy jest przekazywany do procedury, która oczekuje, że jest tablicą jednowymiarową.

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

End Sub

Public Sub callDemoSub()

Dim twoDimensions(,) As Integer

demoSub(twoDimensions)

End Sub

Wnioskowanie typu mogą być wywoływane tylko przez pominięcie wszystkich argumentów typu.Jeśli podasz jeden argument typu, należy podać je wszystkie.

Wnioskowanie typu jest obsługiwana tylko dla rodzajowego procedur.Nie można wywołać wnioskowanie typu na rodzajowy klasy, struktury, interfejsy lub delegatów.

Przykład

Opis

Poniższy przykład definiuje rodzajowego Function procedurę, aby znaleźć określony element w tablicy.Definiuje jeden parametr typu i używa jej do skonstruowania dwa parametry na liście parametrów.

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

Komentarze

Poprzedni przykład wymaga możliwość porównania searchValue przed każdym elementem searchArray.W celu zagwarantowania takiej możliwości, ogranicza ona parametr typu T do wprowadzenia w życie IComparable interfejsu.W kodzie wykorzystano CompareTo metoda zamiast = operatora, ponieważ nie ma gwarancji, że argument typu dostarczone dla T obsługuje = operatora.

Można przetestować findElement procedurę z następującego kodu.

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

Poprzednie wzywa do MsgBox wyświetlić odpowiednio "0", "1" i "-1".

Zobacz też

Zadania

Porady: definiowanie klasy, która może zapewnić identyczną funkcjonalność różnych typów danych (Visual Basic)

Porady: używanie klasy ogólnej (Visual Basic)

Informacje

Lista typów (Visual Basic)

Lista parametrów (Visual Basic)

Koncepcje

Typy ogólne w Visual Basic (Visual Basic)

Procedury w Visual Basic

Parametry i argumenty procedur (Visual Basic)