Een interface in Visual Basic wordt gedeclareerd met het trefwoord Interface. Een interface definieert een set methoden die moeten worden geïmplementeerd in klassen die deze interface implementeren.
Kenmerken:
Voorbeeldcode:
Interface ILogger Sub Log(message As String) End Interface Interface IErrorNotifier Sub NotifyError(errorMsg As String) End Interface Public Class FileLogger Implements ILogger, IErrorNotifier Public Sub Log(message As String) Implements ILogger.Log ' Implementatie van logging End Sub Public Sub NotifyError(errorMsg As String) Implements IErrorNotifier.NotifyError ' Implementatie van foutmelding End Sub End Class
Is het mogelijk om twee interfaces te implementeren als beide methoden met dezelfde naam maar een andere handtekening hebben? Zal zo'n klasse compileren?
Antwoord: Ja, het is mogelijk om twee van zulke interfaces te implementeren. Bij verschillende handtekeningen vereist de compiler expliciete implementatie van elke methode, anders ontstaat er ambiguïteit. Gebruik de volledige naam van de interface bij implementatie:
Public Class Example Implements IFirst, ISecond Public Sub DoWork() Implements IFirst.DoWork ' Implementatie voor IFirst End Sub Public Sub DoWork(value As Integer) Implements ISecond.DoWork ' Implementatie voor ISecond End Sub End Class
Verhaal
Verlies van functionaliteit door onvoldoende implementatie van de interface: De ontwikkelaar heeft niet alle elementen van de gedeclareerde interface geïmplementeerd, de fout bleek impliciet bij het toevoegen van de klasse aan een collectie die een volledig geïmplementeerd contract verwachtte, wat leidde tot runtime-fouten.
Verhaal
Conflicten tussen methoden bij het implementeren van meerdere interfaces: In het project moesten interfaces met gelijke methoden worden geïmplementeerd. Door gebrek aan expliciete implementatie „overschreven“ de methoden elkaar, en ontvangers kregen slechts één van de versies, wat leidde tot onjuist gedrag van de logica.
Verhaal
Schending van het principe van scheiding van verantwoordelijkheden: In een groot project implementeerde één klasse te veel interfaces vanwege codekopiëren. Dit maakte het moeilijk om de implementatie van contracten te volgen en de compatibiliteit tussen interfaces te waarborgen.