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: używanie klasy ogólnej (Visual Basic)
Informacje
Lista parametrów (Visual Basic)