Difference between revisions of "extended class syntax"
From Lazarus wiki
Jump to navigationJump to searchPaul Ishenin (talk | contribs) (New page: <delphi> type TSomeClass = class private type TSomeType = type integer; // an internal type class var FSomeClassVar: TSomeType; // class variable belongs to a...) |
m (Fixed syntax highlighting) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
− | < | + | === Static fields, static properties, regular fields and regular properties === |
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
type | type | ||
TSomeClass = class | TSomeClass = class | ||
Line 28: | Line 30: | ||
WriteLn(SomeClass.SomeProperty); | WriteLn(SomeClass.SomeProperty); | ||
end. | end. | ||
− | </ | + | </syntaxhighlight> |
+ | |||
+ | === Class constants === | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
+ | type | ||
+ | TSomeClass = class | ||
+ | strict private | ||
+ | const | ||
+ | PrivateConst = 1; | ||
+ | type | ||
+ | PrivateType = type Integer; | ||
+ | var | ||
+ | FPrivateField: PrivateType; | ||
+ | public | ||
+ | procedure DoSomething(Value: PrivateType = PrivateConst); | ||
+ | function ReturnSomething: PrivateType; | ||
+ | property SomeProp: PrivateType read FPrivateField write FPrivateField default PrivateConst; | ||
+ | end; | ||
+ | |||
+ | procedure TSomeClass.DoSomething(Value: PrivateType = PrivateConst); | ||
+ | begin | ||
+ | end; | ||
+ | |||
+ | function TSomeClass.ReturnSomething: PrivateType; | ||
+ | begin | ||
+ | Result := PrivateConst; | ||
+ | end; | ||
+ | |||
+ | begin | ||
+ | end. | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Nested classes === | ||
+ | |||
+ | <syntaxhighlight lang=pascal> | ||
+ | type | ||
+ | TSomeClass = class | ||
+ | strict private | ||
+ | type | ||
+ | TPrivateNestedClass = class | ||
+ | public | ||
+ | procedure DoSomething; | ||
+ | end; | ||
+ | public | ||
+ | type | ||
+ | TNestedClass = class | ||
+ | public | ||
+ | procedure DoSomething; | ||
+ | end; | ||
+ | class procedure Test; virtual; | ||
+ | end; | ||
+ | |||
+ | TDescendant = class(TSomeClass) | ||
+ | public | ||
+ | class procedure Test; override; | ||
+ | end; | ||
+ | |||
+ | procedure TSomeClass.TPrivateNestedClass.DoSomething; | ||
+ | begin | ||
+ | WriteLn('TSomeClass.TPrivateNestedClass.DoSomething: ok'); | ||
+ | end; | ||
+ | |||
+ | procedure TSomeClass.TNestedClass.DoSomething; | ||
+ | begin | ||
+ | WriteLn('TSomeClass.TNestedClass.DoSomething: ok'); | ||
+ | end; | ||
+ | |||
+ | class procedure TSomeClass.Test; | ||
+ | var | ||
+ | P: TPrivateNestedClass; | ||
+ | N: TNestedClass; | ||
+ | begin | ||
+ | P := TPrivateNestedClass.Create; | ||
+ | P.DoSomething; | ||
+ | P.Free; | ||
+ | N := TNestedClass.Create; | ||
+ | N.DoSomething; | ||
+ | N.Free; | ||
+ | end; | ||
+ | |||
+ | class procedure TDescendant.Test; | ||
+ | var | ||
+ | N: TNestedClass; | ||
+ | begin | ||
+ | N := TNestedClass.Create; | ||
+ | N.DoSomething; | ||
+ | N.Free; | ||
+ | end; | ||
+ | |||
+ | begin | ||
+ | TSomeClass.Test; | ||
+ | TDescendant.Test; | ||
+ | end. | ||
+ | </syntaxhighlight> |
Latest revision as of 14:18, 14 February 2020
Static fields, static properties, regular fields and regular properties
type
TSomeClass = class
private
type
TSomeType = type integer; // an internal type
class var
FSomeClassVar: TSomeType; // class variable belongs to a class, not an instance
var
FSomeIntanceVar: TSomeType; // instance variable belongs to instance. it is a usual field
class procedure SetSomeClassVar(const AValue: TSomeType); static;
public
class property SomeProperty: TSomeType read FSomeClassVar write SetSomeClassVar; // class property - belongs to a class
property SomeInstanceProp: TSomeType read FSomeIntanceVar;
end;
{ TSomeClass }
class procedure TSomeClass.SetSomeClassVar(const AValue: TSomeType);
begin
FSomeClassVar := AValue;
end;
var
SomeClass: TSomeClass;
begin
SomeClass.SomeProperty := 1;
WriteLn(SomeClass.SomeProperty);
end.
Class constants
type
TSomeClass = class
strict private
const
PrivateConst = 1;
type
PrivateType = type Integer;
var
FPrivateField: PrivateType;
public
procedure DoSomething(Value: PrivateType = PrivateConst);
function ReturnSomething: PrivateType;
property SomeProp: PrivateType read FPrivateField write FPrivateField default PrivateConst;
end;
procedure TSomeClass.DoSomething(Value: PrivateType = PrivateConst);
begin
end;
function TSomeClass.ReturnSomething: PrivateType;
begin
Result := PrivateConst;
end;
begin
end.
Nested classes
type
TSomeClass = class
strict private
type
TPrivateNestedClass = class
public
procedure DoSomething;
end;
public
type
TNestedClass = class
public
procedure DoSomething;
end;
class procedure Test; virtual;
end;
TDescendant = class(TSomeClass)
public
class procedure Test; override;
end;
procedure TSomeClass.TPrivateNestedClass.DoSomething;
begin
WriteLn('TSomeClass.TPrivateNestedClass.DoSomething: ok');
end;
procedure TSomeClass.TNestedClass.DoSomething;
begin
WriteLn('TSomeClass.TNestedClass.DoSomething: ok');
end;
class procedure TSomeClass.Test;
var
P: TPrivateNestedClass;
N: TNestedClass;
begin
P := TPrivateNestedClass.Create;
P.DoSomething;
P.Free;
N := TNestedClass.Create;
N.DoSomething;
N.Free;
end;
class procedure TDescendant.Test;
var
N: TNestedClass;
begin
N := TNestedClass.Create;
N.DoSomething;
N.Free;
end;
begin
TSomeClass.Test;
TDescendant.Test;
end.