Interfaces in Delphi-programmering 101

In Delphi heeft "interface" twee verschillende betekenissen. In OOP-jargon kun je een interface beschouwen als een klasse zonder implementatie. In de Delphi-eenheid definitie interface sectie wordt gebruikt om alle openbare secties van code die in een eenheid verschijnen aan te geven. In dit artikel worden interfaces uitgelegd vanuit een OOP-perspectief.

Als je een ijzersterke applicatie wilt maken op een manier die ervoor zorgt dat je code onderhoudbaar, herbruikbaar en flexibel is, helpt de OOP-aard van Delphi je om de eerste 70% van je route te rijden. Het definiëren en implementeren van interfaces helpt met de resterende 30%.

Abstracte klassen

Je kunt een interface beschouwen als een abstracte klasse met alle implementatie verwijderd en alles wat niet openbaar is verwijderd. Een abstracte klasse in Delphi is een klasse die niet kan worden geïnstantieerd - u kunt geen object maken van een klasse die als abstract is gemarkeerd.

Laten we een voorbeeld van een interfaceverklaring bekijken:

type
IConfigChanged = koppel[0D57624C-CDDE-458B-A36C-436AE465B477 ']
procedure ApplyConfigChange;
einde;

De IConfigChanged is een interface. Een interface is net als een klasse gedefinieerd, het trefwoord "interface" wordt gebruikt in plaats van "klasse". De Guid-waarde die volgt op het interface-trefwoord wordt door de compiler gebruikt om de interface uniek te identificeren. Om een ​​nieuwe GUID-waarde te genereren, drukt u gewoon op Ctrl + Shift + G in de Delphi IDE. Elke interface die u definieert, heeft een unieke Guid-waarde nodig.

Een interface in OOP definieert een abstractie - een sjabloon voor een werkelijke klasse die de interface implementeert - die de methoden implementeert die door de interface zijn gedefinieerd. Een interface doet eigenlijk niets, het heeft alleen een handtekening voor interactie met andere (implementerende) klassen of interfaces.

De implementatie van de methoden (functies, procedures en eigenschap Get / Set-methoden) gebeurt in de klasse die de interface implementeert. In de interfacedefinitie zijn er geen bereiksecties (privé, openbaar, gepubliceerd, enz.) Alles is openbaar. Een interfacetype kan functies, procedures (die uiteindelijk methoden van de klasse worden die de interface implementeert) en eigenschappen definiëren. Wanneer een interface een eigenschap definieert, moet deze de get / set-methoden definiëren - interfaces kunnen geen variabelen definiëren.

Net als bij klassen kan een interface van andere interfaces erven.

type
IConfigChangedMore = koppel(IConfigChanged)
procedure ApplyMoreChanges;
einde;

Programming

De meeste Delphi-ontwikkelaars denken aan COM-programmering wanneer ze aan interfaces denken. Interfaces zijn echter slechts een OOP-functie van de taal, ze zijn niet specifiek aan COM gekoppeld. Interfaces kunnen worden gedefinieerd en geïmplementeerd in een Delphi-toepassing zonder COM aan te raken.

Implementatie

Om een ​​interface te implementeren, moet u de naam van de interface toevoegen aan de klasse-instructie, zoals in:

type
TMainForm = klasse(TForm, IConfigChanged)
openbaar
procedure ApplyConfigChange;
einde;

In de bovenstaande code implementeert een Delphi-formulier "MainForm" de interface IConfigChanged.

Waarschuwing: wanneer een klasse een interface implementeert, moet deze alle methoden en eigenschappen ervan implementeren. Als u een methode (bijvoorbeeld: ApplyConfigChange) niet implementeert / vergeet, een compilatietijdfout "E2003 Niet-aangegeven ID: 'ApplyConfigChange'" zal voorkomen.
Waarschuwing: als u probeert de interface op te geven zonder de GUID-waarde, ontvangt u: "E2086 Type 'IConfigChanged' is nog niet volledig gedefinieerd".