Förstå Delphi-klassmetoder

I Delphi är en metod en procedur eller funktion som utför en operation på ett objekt. En klassmetod är en metod som fungerar på en klassreferens istället för en objektreferens.

Om du läser mellan raderna kommer du att upptäcka att klassmetoder är tillgängliga även om du inte har skapat en instans av klassen (objektet).

Klassmetoder kontra objektmetoder

Varje gång du skapar en Delphi-komponent dynamiskt använder du en klassmetod: konstruktören.

Skapa konstruktören är en klassmetod, till skillnad från praktiskt taget alla andra metoder du kommer att stöta på i Delphi-programmering, som är objektmetoder. En klassmetod är en metod för klassen, och lämpligt nog är en objektmetod en metod som kan kallas av en instans av klassen. Detta illustreras bäst med ett exempel, med klasser och objekt markerade med rött för tydlighet:

myCheckbox: = TCheckbox.Create (noll);

Här föregås samtalet till Skapa klassnamnet och en period ("TCheckbox."). Det är en metod i klassen, allmänt känd som en konstruktör. Detta är den mekanism som skapar instanser av en klass. Resultatet är ett exempel på klassen TCheckbox. Dessa fall kallas objekt. Kontrast den föregående kodraden med följande:

myCheckbox.Repaint;

Här kallas Repaint-metoden för TCheckbox-objektet (ärvt från TWinControl). Samtalet till Repaint föregås av objektvariabeln och en period ("myCheckbox.").

Klassmetoder kan kallas utan en instans av klassen (t.ex. "TCheckbox.Create"). Klassmetoder kan också kallas direkt från ett objekt (t.ex. "myCheckbox.ClassName"). Objektmetoder kan dock endast kallas av en instans av en klass (t.ex. "myCheckbox.Repaint").

Bakom kulisserna fördelar Create-konstruktören minne för objektet (och utför alla ytterligare initialiseringar som anges av TCheckbox eller dess förfäder).

Experimentera med dina egna klassmetoder

Tänk på AboutBox (ett anpassat formulär "Om den här applikationen"). Följande kod använder något som:

procedur TfrMain.mnuInfoClick (avsändare: TObject);
Börja
AboutBox: = T AboutBox.Create (noll);
Prova
AboutBox.ShowModal;
till sist
AboutBox.Release;
slutet;
slutet;
Detta är naturligtvis ett mycket trevligt sätt att göra jobbet, men bara för att göra koden lättare att läsa (och hantera) skulle det vara mycket effektivare att ändra den till:
procedur TfrMain.mnuInfoClick (avsändare: TObject);
Börja
TAboutBox.ShowYourself;
slutet;
Ovanstående rad kallar klassmetoden "ShowYourself" i klassen T AboutBox. "ShowYourself" måste markeras med nyckelordet "klass":
klassprocedur T AboutBox.ShowYourself;
Börja
AboutBox: = T AboutBox.Create (noll);
Prova
AboutBox.ShowModal;
till sist
AboutBox.Release;
slutet;
slutet;

Saker att tänka på

  • Definitionen av en klassmetod måste innehålla den reserverade ordklassen innan proceduren eller det nyckelord som startar definitionen.
  • AboutBox-formuläret skapas inte automatiskt (projektalternativ).
  • Sätt AboutBox-enheten till användningsklausulen för huvudformuläret.
  • Glöm inte att förklara proceduren i gränssnittet (offentlig) del av AboutBox-enheten.