Definirea procedurilor in VB.NET

Procedura reprezinta un bloc de specificatii VB.NET incluse intr-o declaratie precum: Function, Sub, Operator, Get si Set. Toate specificatiile executabile VB.NET sunt incluse intr-o procedura.

Invocarea unei proceduri este cunoscuta si sub denumirea de apel de procedura si reprezinta momentul lansarii in executie a specificatiilor incluse in respectiva procedura. La sfarsitul executiei codului din procedura, controlul executiei se preda codului in punctul in care procedura a fost invocata.

Predarea controlului catre codul apelator se efectueaza astfel:

  • specificatia Return: controlul este predat imediat codului apelator; pot exista mai multe specificatii return intr-o procedura;
  • specificatia Exit Sub sau Exit Function: predarea imediata a controlului catre codul apelator; pot exista mai multe astfel de specificatii si pot fi combinate cu specificatii de Return;
  • daca Return sau Exit Sub/Exit Function lipsesc din codul unei proceduri, atunci specificatiile End Sub, End Function, End Get sau End Set inchid executia procedurii, apelul fiind predat imediat catre codul sursa apelator.

O procedura este definita cu zero, unul sau mai multi parametri ce reprezinta valori asteptate a fi transferate in procedura. La invocare, lista de parametri este pusa in corespondenta cu lista de argumente. Argumentul reprezinta valoarea transferata corespunzator parametrului, la invocarea unei proceduri.

Tipuri de proceduri definite in VB.NET:

  • Sub: executa actiuni, dar nu returneaza nici o valoarea codului apelator;
'definire procedura Sub
Sub Adun(ByVal x As Integer, ByVal y As Integer, ByRef z As Long)
        z = x + y
End Sub
...
'invocare procedura Sub
Dim a, b As Integer
Dim c As Long
a = 11
b = 13
Adun(a, b, c)
MsgBox("Suma este:" & c)
...
  • handler de eveniment […]: procedura Sub executa la transmiterea mesajului asociat producerii unui eveniment […];
'definire handler de eveniment
Public Sub OpDiferenta(ByVal a As Integer, ByVal b As Integer)
    Dim dif As Integer
    dif = a - b
    MsgBox("Diferenta este: " & CStr(dif))
End Sub

'definirea unui eveniment
Public Event Calcul(ByVal x As Integer, ByVal y As Integer)

'definire procedura de asociere eveniment-handler eveniment
Public Sub SetUpEventHandlerDif(ByVal a As Integer, ByVal b As Integer)
    AddHandler Calcul, AddressOf OpDiferenta
End Sub
...
'prima invocare a handler-ului de eveniment
RaiseEvent Calcul(x, y)
'a doua invocare a handler-ului de eveniment
RaiseEvent Calcul(x, y)
...
  • Function: executa actiuni si returneaza o valoare catre codul apelator;
'definire procedura Function
Function Dif(ByVal x As Integer, ByVal y As Integer) As Long
        Return x - y
End Function
...
'invocare procedura Function
Dim a, b As Integer
Dim c As Long
a = 11
b = 13
c = Dif(a, b)
MsgBox("Diferenta este:" & c)
...
  • Property: returneaza si asociaza valori proprietatilor obiectelor sau modulelor […];
'definire clasa de obiecte Sir
Public Class Sir
    Private s As String

    Public Sub New(ByVal x As String)
        s = x
    End Sub
   
    Public Property sirChar()
        Get
            Return s
        End Get
        Set(ByVal value)
            s = value
        End Set
    End Property
End Class
...
'invocare procedura Property
Dim obA, obB As Sir
obA = New Sir("Primul sir.")
obB = New Sir("Al doilea sir.")
MsgBox(obA.sirChar)
obB.sirChar = obA.sirChar
MsgBox(obB.sirChar)
...
  • Operator: defineste comportamentul standard al unui operator atunci cand operandul sau operanzii sunt clase de obiecte […] sau structuri […] definite de utilizator;
'definire clasa de obiecte Sir
Public Class Sir
    Public s As String
    Public Sub New(ByVal x As String)
        s = x
    End Sub
    Public Shared Operator +(ByVal x As Sir, ByVal y As Sir) As Sir
        Dim rez As New Sir("")
        rez.s = x.s & y.s
        Return rez
    End Operator
End Class
...
'invocare procedura Operator
Dim obA, obB As Sir
obA = New Sir("Primul sir.")
obB = New Sir("Al doilea sir.")
Dim ObRez As Sir
ObRez = obA + obB
MsgBox(ObRez.s)
...
  • generice: definesc unul sau mai multi parametri de tip in plus fata de lista de parametri; la invocare sunt transferate tipuri de date specifice.
'definire procedura generica
Public Sub Proc(Of t)(ByVal x As t)

End Sub
...
'invocare procedura generica
Proc(15)
'Tipul argumentului transferat se determina la momentul executiei
...

Avantaje ale structurarii codului in proceduri:

  • impartirea aplicatiei in componente logice: usurinta de dezvoltare si depanare;
  • reutilizarea procedurilor: mai multe aplicatii pot utiliza aceleasi proceduri cu eventuale modificari minime ale codului acestora.