Expertul delphi, cum să apelați metoda privată a unei clase într-un alt modul (documentație,

Cum se invocă metoda privată a unei clase într-un alt modul

Uneori devine necesar să apelați metoda privată a unei alte clase situată într-un alt modul. Acest lucru este contrar principiilor POR, stabilite în Delphi, dar încă încearcă să o facă. De exemplu, luați în considerare cazul când doriți să salvați / citiți toate proprietățile succesorului TPsistent al obiectului. de exemplu, un obiect de clasă TFont.







În Delphi există clase standard TReader, TWriter concepute pentru a salva / citi proprietățile obiectului. În aceste clase, suntem interesați de metodele TWriter.WriteProperties (instanță: TPersistent) și TReader.ReadProperty (AInstance: TPersistent). Metoda WriteProperties vă permite să salvați toate proprietățile obiectului TPersistent în flux. Apelarea metodei ReadProperty în buclă vă permite să citiți toate proprietățile stocate anterior din flux.

Să luăm în considerare păstrarea proprietăților.

În Delphi5, totul este simplu. Declarația metodei WriteProperties se află în secțiunea Protejată din clasa TWriter. Apelarea la problemele speciale nu va fi:







adăugați câteva verificări suplimentare pentru a îmbunătăți fiabilitatea acestui cod

Ca rezultat, am obținut codul care poate fi folosit pentru salvarea în flux / citirea din flux a tuturor proprietăților oricărui obiect al moștenitorului TPersistent.


Unde poate fi folosit? De exemplu, vă puteți aminti TEdit.Font sau TForm.Icon sau TImage.Picture.

Care sunt avantajele acestei metode? Am creat metode universale pentru stocarea / citirea tuturor proprietăților oricărui obiect al moștenitorului TPersistent. a primit un cod mic în dimensiune. Și în final am învățat cum să numim metodele private ale unei alte clase.

Care sunt dezavantajele sale? "Stilul rău" de programare, ocolind principiile POR. Acum codul nostru implicit depinde de modulele classes.pas. Orice modificare în modulul classes.pas. în obiectele TWriter, TReader, în metodele TWriter.WriteCollection, TReader.ReadCollection poate duce la defecțiuni în codul dezvoltat de noi. Și nu putem vedea acest lucru la etapa de compilare a cererii, numai la momentul funcționării sale. Dar cât de des ați schimbat și recompilați modulul classes.pas. mi se pare că nu prea mult.


Tot codul de mai sus, puteți obține prin descărcarea proiectului demo. Îl puteți folosi pe propriul dvs. risc în aplicațiile dvs. Dar principalul lucru pe care vroiam să-l arăt - folosind metode de programare non-standard, puteți obține rezultate interesante, chiar apelați metoda privată a unei clase într-un alt modul.







Trimiteți-le prietenilor: