I Delphi har "gränssnitt" två distinkta betydelser. I OOP-jargong kan du tänka på ett gränssnitt som en klass utan implementering. I Delphi enhetsdefinitionsgränssnitt används avsnitt för att deklarera alla offentliga kodavsnitt som visas i en enhet. Den här artikeln kommer att förklara gränssnitt från ett OOP-perspektiv.
Om du vill skapa en bunnsolid applikation på ett sätt som din kod är underhållbar, återanvändbar och flexibel kommer OOP-naturen i Delphi att hjälpa dig att köra de första 70% av din rutt. Att definiera gränssnitt och implementera dem hjälper till med de återstående 30%.
Du kan tänka på ett gränssnitt som en abstrakt klass med all implementering avdragen och allt som inte är offentligt bort. En abstrakt klass i Delphi är en klass som inte kan instanseras - du kan inte skapa ett objekt från en klass markerad som abstrakt.
Låt oss ta en titt på ett exempel på gränssnittsdeklaration:
typ
IConfigChanged = gränssnitt[ '0D57624C-CDDE-458B-A36C-436AE465B477']
procedur ApplyConfigChange;
slutet;
De IConfigChanged är ett gränssnitt. Ett gränssnitt definieras ungefär som en klass, nyckelordet "gränssnitt" används istället för "klass". Guidevärdet som följer gränssnittets nyckelord används av kompilatorn för att identifiera gränssnittet på ett unikt sätt. För att generera ett nytt GUID-värde trycker du bara på Ctrl + Shift + G i Delphi IDE. Varje gränssnitt du definierar behöver ett unikt Guid-värde.
Ett gränssnitt i OOP definierar en abstraktion - en mall för en faktisk klass som kommer att implementera gränssnittet - som kommer att implementera de metoder som definieras av gränssnittet. Ett gränssnitt gör egentligen ingenting, det har bara en signatur för interaktion med andra (implementerande) klasser eller gränssnitt.
Implementeringen av metoderna (funktioner, procedurer och egendom Get / Set-metoder) görs i klassen som implementerar gränssnittet. I gränssnittsdefinitionen finns det inga omfattningsavsnitt (privata, offentliga, publicerade etc.) allt är offentligt. En gränssnitttyp kan definiera funktioner, procedurer (som så småningom blir metoder i klassen som implementerar gränssnittet) och egenskaper. När ett gränssnitt definierar en egenskap måste det definiera metoderna för get / set - gränssnitt kan inte definiera variabler.
Som med klasser kan ett gränssnitt ärva från andra gränssnitt.
typ
IConfigChangedMore = gränssnitt(IConfigChanged)
procedur ApplyMoreChanges;
slutet;
De flesta Delphi-utvecklare när de tänker på gränssnitt de tänker på COM-programmering. Men gränssnitt är bara en OOP-funktion i språket - de är inte bundna till COM specifikt. Gränssnitt kan definieras och implementeras i en Delphi-applikation utan att beröra COM alls.
För att implementera ett gränssnitt måste du lägga till namnet på gränssnittet i klassuppgiften, som i:
typ
TMainForm = klass(TForm, IConfigChanged)
offentlig
procedur ApplyConfigChange;
slutet;
I ovanstående kod implementerar en Delphi-form med namnet "MainForm" IConfigChanged-gränssnittet.
Varning: När en klass implementerar ett gränssnitt måste den implementera alla dess metoder och egenskaper. Om du misslyckas med / glömma att implementera en metod (till exempel: ApplyConfigChange) kommer ett kompileringstidsfel "E2003 odeklarerad identifierare: 'ApplyConfigChange'" kommer att inträffa.
Varning: om du försöker specificera gränssnittet utan GUID-värdet kommer du att få: "E2086 Typ 'IConfigChanged' är ännu inte helt definierad".