Obecné procedury v jazyce Visual Basic
A Obecný postup, také nazývaná Obecná metoda, je postup definovány alespoň jeden typ parametru.To umožňuje přizpůsobit datové typy jeho požadavky na každém vyvolá postup volající kód.
Postup není obecný jednoduše na základě definovaného uvnitř Obecná třída nebo obecná struktura.Chcete-li být obecné, musí trvat nejméně jeden parametr typu k jakékoliv běžné parametry, které může trvat.Obecná třída nebo struktury obsahují neobecné postupy a neobecné třídu, strukturu, nebo modul může obsahovat obecné postupy.
Obecný postup můžete použít jeho parametry typu v jeho normální parametr seznamu jeho návratový typ, pokud má jeden a postup jeho kód.
Odvození typu
Obecný postup lze volat bez argumentů typu dodávající vůbec.Volání je tímto způsobem, kompilátor pokusí zjistit odpovídající datové typy předat argumenty procedury typu.To se nazývá odvození typu.Následující kód ukazuje volání v které kompilátor odvodí, že by ji předat typu String na parametr typu t.
Public Sub testSub(Of t)(ByVal arg As t)
End Sub
Public Sub callTestSub()
testSub("Use this string")
End Sub
Pokud je kompilátor nelze odvodit z kontextu volání argumenty typu, hlásí chybu.Jednou z možných příčin takové chyby je neshoda hodnosti matici.Předpokládejme například, že definovat normální parametr jako maticový parametr typu.Pokud zavoláte obecný postup dodávající matice jiné pořadí (číslo dimenze) neshoda způsobí odvození typu selhání.Následující kód ukazuje volání v které dvourozměrné pole je předána postup, který očekává jednorozměrné pole.
Public Sub demoSub(Of t)(ByVal arg() As t)
End Sub
Public Sub callDemoSub()
Dim twoDimensions(,) As Integer
demoSub(twoDimensions)
End Sub
Odvození typu lze vyvolat pouze vynecháním všech argumentů typu.Pokud zadáte jeden argument typ, je nutné zadat všechny.
Odvození typu je podporována pouze pro obecné postupy.Odvození typu generic třídy, struktury, rozhraní nebo delegátů nelze vyvolat.
Příklad
Description
Následující příklad definuje obecný Function postup vyhledání určitého prvku v matici.Definuje jeden parametr typu a používá vytvořit dva parametry v seznamu parametrů.
Kód
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
Komentáře
V předchozím příkladu vyžaduje možnost porovnávat searchValue proti každému prvku searchArray.Pro zaručení tato možnost omezuje parametr typu T implementovat IComparable rozhraní.Kód používá CompareTo metody namísto = operátor, protože je zaručeno, že zadaný typ argumentu pro T podporuje = operátor.
Můžete vyzkoušet findElement postup s následujícím kódem.
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
Předchozí volání k MsgBox zobrazení "0", "1" a "-1".
Viz také
Úkoly
Postupy: Definice třídy, která poskytne identické funkce pro různé datové typy (Visual Basic).
Postupy: Použití obecné třídy (Visual Basic)
Referenční dokumentace
Seznam parametrů (Visual Basic)
Koncepty
Obecné typy v jazyce Visual Basic (Visual Basic)