Delphi: vaatleme klasside uusi võimalusi

Nii, nüüd kus olen Delphi XE omanik, pean nentima, et Delphi klasside juures on palju uusi võimalusi tekkinud.
— Võtame koodilõigu ette ja teeme väikese kirjeldamise

program klassid;

{$APPTYPE CONSOLE}

uses
SysUtils;

type

TAclass = class
private
FPorgandid : Integer;
end;

TBclass = class
(* strict private tähendab, et isegi unitis, kus klass paikneb, ei ole võimalik selle klassi muutujat välja kutsuda (klass luuakse create abil samas unitis). Vt allpool näidet *)

strict private
FPorgandid : Integer;
protected

// nüüd ka delphis olemas staatilised muutujad !!

class var FStaatilinemuutuja:integer;
class var FVal : Integer;
// samuti staatilised propertyd !

class functionGetVal: Integer; static;
class procedure SetVal(val: Integer); static;
public

// klasside sees saate nüüd ka konstante hoida !
const Nuudlid = ‘Nuudlid’;
const Hapupiim = ‘Hapupiim’;

// staatiline protseduur, mis kuvab staatilise muutuja väärtust

class procedure kuvaja();
class property val : Integer read GetVal write SetVal;

procedure ytletere;virtual; // tavaline virtuaalne meetod
end;

(* Sealed tähendab, et pärimisahel pannakse kinni TDclassi ei saa enam tuletada klassist TCclass *)
TCclass = class sealed(TBclass)
public

end;

//TDclass = class(TCclass)
// end;

TEclass = class(TBclass)
public
// final välistab järgmise ülekirjeldamise järglasklassis
procedure ytletere;override; final;
end;

(*
TFClass = class(TEclass)
public
procedure ytletere;override; // [DCC Error] klassid.dpr(41): E2352 Cannot override a final method
end;
*)

(*
Struktuur oleks justkui initsialiseeritud “klass”
*)
TStruktuurJustkuiklass = record
Fmuutuja : integer;

public
// struktuuril on constructor…
constructor create(p : Integer); // alati mingit parameetrit vaja
end;

// —————————————

class function TBclass.GetVal: Integer;
begin
result:=FVal;
end;

class procedure TBclass.SetVal(val: Integer);
begin
FVal:=val;
end;

class procedure TBclass.kuvaja();
begin
writeln(self.FStaatilinemuutuja);
end;

procedure TBclass.ytletere;
begin
writeln(‘Tere’);
end;

procedure TEclass.ytletere;
begin
writeln(‘Tere 2’);
end;

constructor TStruktuurJustkuiklass.create;
begin
writeln(‘Initsialiseeriti struktuur TStruktuurJustkuiklass’,p);
end;

// —————————————

(*
procedure TFClass.ytletere;
begin
writeln(‘Tere 3’);
end;
*)

var
pA : TAclass;
pB : TBclass;
pC : TBclass;
pRec : TStruktuurJustkuiklass;
begin
try
pA:=TAclass.Create;
pA.FPorgandid:=123;

pB:=TBclass.Create;
//pB.FPorgandid:=1; (* [DCC Error] klassid.dpr(30): E2361 Cannot access private symbol TBclass.FPorgandid *)

TBclass.FStaatilinemuutuja:=45;
TBclass.kuvaja;

// kutsume välja staatilist propertyd
TBclass.val:=1;
TBclass.val:=TBclass.val+1;
writeln(TBclass.val);

writeln(TBclass.Nuudlid);
writeln(TBclass.Hapupiim);

pRec.Fmuutuja:=45;
pRec:=TStruktuurJustkuiklass.create(45);

readln;

finally
pA.Free;
pB.Free;
end;
end.

Nii sellega lühike ülevaade lõppes…
Järgmine kord üritan kirjutada Generics kasutamisest, “vahendid” mis ikka koodimahtu kõvasti vähendavad.

Advertisements

Lisa kommentaar

Täida nõutavad väljad või kliki ikoonile, et sisse logida:

WordPress.com Logo

Sa kommenteerid kasutades oma WordPress.com kontot. Logi välja /  Muuda )

Google+ photo

Sa kommenteerid kasutades oma Google+ kontot. Logi välja /  Muuda )

Twitter picture

Sa kommenteerid kasutades oma Twitter kontot. Logi välja /  Muuda )

Facebook photo

Sa kommenteerid kasutades oma Facebook kontot. Logi välja /  Muuda )

Connecting to %s


%d bloggers like this: