Avatar billede surreal Nybegynder
30. november 2000 - 11:27 Der er 7 kommentarer og
1 løsning

Classer

Er der ikke en smart måde man kan lave alle de public functioner/procedure i stedet for at skrive en function til hver hent og en procedure til hver gem. Noget med \'read as\' og \'write as\' ikke??
Avatar billede moa Nybegynder
30. november 2000 - 11:42 #1
Prøv at slå op under \"property\" i din Delphi hjælp - jeg kan desværre ikke lige et eksempel i hovedet, så du får en kommentar istedetfor et svar, og så må du selv guide dig udfra hjælpen - håber det er okay ;-)
Avatar billede delphidaner Nybegynder
30. november 2000 - 11:45 #2
Mener du sådan her?

type
TNewClass = class(TObject)
private
  function ReadInt: Integer;
  procedure WriteInt(Value: Integer);
published
  property Int: Integer; read ReadInt write WriteInt;
end;

Tror nok at syntaksen er rigtig.
Avatar billede pellelil Nybegynder
30. november 2000 - 12:07 #3
Hvis du ikke vil gør noget specielt i forbindelse med din Read/Write hvorfor tager du så ikke bare fat i \"variablen\" direkte ?

<SNIP>
TNewClass = class(TObject)
private
  fVar1 : Integer;
  fVar2 : String;
published
  property Prop1 : Integer; read fVar1 write fVar1;
  property Prop2 : String; read fVar2 write fVar2;
end;
</SNIP>
Avatar billede tknudsen Nybegynder
30. november 2000 - 13:21 #4
tjaa - siden du vil lade dine objekt instanser og de klasser som nedarver fra din klasse tilgå dine member variabler mere eller mindre direkte kan du vel ligeså godt putte dem ind i public. De properties du laver bliver alligevel public (published ?)
Avatar billede pellelil Nybegynder
30. november 2000 - 13:29 #5
tknudsen> \"God skik siger\", at du skjuler dine variabler og så laver methode (i dette tilfælde properties) til at accesse dem - men ellers har du fuldstændig ret (om du tilgår dem direkte eller som jeg gør - giver samme resultat).

Personlig så laver JEG altid properties og så \"skuler jeg\" variablerne enten i Private eller Protected. Dette giver den fordel at jeg på et senere tidspunkt nemt kan ændre den måde hvorpå class\'en (internt) \"læser/skriver\" variablerne uden at jeg skal ændre en eneste linie i resten af koden. Som jeg ser det giver det kun det kun \"lidt ekstra arbejde\" med at definere properti\'erne (som er tjent ind hvis man skal ændre på det senere).
Avatar billede tknudsen Nybegynder
30. november 2000 - 13:40 #6
pellelil>det er et foreslag - jeg gør som du, men er surreal lige begyndt med at programmere sine egne klasser kunne jeg forestille mig at det er et irretationsmoment at skulle skrive set og get funktioner til alle member vars
Avatar billede pellelil Nybegynder
30. november 2000 - 13:44 #7
tknudsen> Jeg er med på hvad du mener...
Avatar billede delphi Nybegynder
30. november 2000 - 14:48 #8
Der er meget lidt ekstra arbejde i at benytte properties og langt bedre service på sigt.

Start med at lave din classe således:

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
    Property Variabel : Integer;
  end;

Tryk så på CTRL+SHIT+C, hvorefter Delphi ændrer din code til:

type
  TForm1 = class(TForm)
  private
    FVariabel: Integer;
    procedure SetVariabel(const Value: Integer);
    { Private declarations }
  public
    { Public declarations }
    Property Variabel : Integer read FVariabel write SetVariabel;
  end;

Bemærk at coden her tilgår variable direkte ved read mens write operationer går igennem en metode kaldet SetVariabel (som desuden er oprettet automatisk i Implementation delen.  Ønsker man så at read access også skal foregå via en metode, ændrer man lige teksten \"read FVariabel\" til \"read GetVariabel\" og trykker igen på CTRL+SHIFT+C og igen sker der noget magisk.

PS: Selvom properties er lækre at arbejde med, så er det ikke altid de kan benyttes så nemt.  Fx. kan Array properties kun oprettes under Public delen og i COM kan man ikke skjule property access metoderne i private delen, så noget af ideen forsvinder.

Delphi

Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester