Con un'interfaccia creiamo un contratto. Ogni classe che implementa un interfaccia deve avere alcune funzioni definite nell'interfaccia che implemanta.
Per creare un'interfaccia, si utilizza la parola chiave Interface seguita dal nome dell'interfaccia. Si termina la dichiarazione di interfaccia con una linea End Interface.
Un interfaccia non può essere istanziata direttamente, possono essere istanziate soltanto le classi che la implementano
[ <attributelist> ] [ accessmodifier ]
Interface name [ ( Of typelist ) ]
[ Inherits classname ]
[ statements ]
End Interface
Dove:
Module esempioInterfacce
Interface IForma
Private lunghezza As Double
Private altezza As Double
Public Function calcolaArea() As Double
End Interface
Class Rettangolo Inherits Forma
Public Sub New(ByVal lung As Double, ByVal alte As Double)
lunghezza = lung
altezza = alte
End Sub
Public Sub impostaLunghezza(ByVal lung As Double)
lunghezza = lung
End Sub
Public Sub impostaAltezza(ByVal alte As Double)
altezza = alte
End Sub
Public Function calcolaArea() As Double Implements IForma.calcolaArea
Return lunghezza * altezza
End Function
End Class
Class Triangolo Implements IForma
Public Sub New(ByVal lung As Double, ByVal alte As Double)
lunghezza = lung
altezza = alte
End Sub
Public Sub impostaLunghezza(ByVal lung As Double) Implements IForma.calcolaArea
lunghezza = lung
End Sub
Public Sub impostaAltezza(ByVal alte As Double)
altezza = alte
End Sub
Public Function calcolaArea() As Double
Return lunghezza * altezza / 2
End Function
End Class
Sub Main()
Dim forma As IForma
forma = New Rettangolo(2.0, 3.0)
Console.WriteLine("Area del rettangolo : {0}", rect.calcolaArea() )
forma = New Triangolo(2.0, 3.0)
Console.WriteLine("Area del triangolo : {0}", tri.calcolaArea() )
End Sub
End Module
Così facendo è possibile dichiarare degli oggetti generici, per poi istanziarli nel tipo che ci interessa a runtime.