Sign in Join
Wiki copytemporary

extended class syntax: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11### Static fields, static properties, regular fields and regular properties
2-
3-``` pascal
2+```
43type
5- TSomeClass = class
6- private
7- type
8- TSomeType = type integer; // an internal type
9- class var
10- FSomeClassVar: TSomeType; // class variable belongs to a class, not an instance
4+ TSomeClass = class
5+ private
6+ type
7+ TSomeType = type integer; // an internal type
8+ class var
9+ FSomeClassVar: TSomeType; // class variable belongs to a class, not an instance
10+ var
11+ FSomeIntanceVar: TSomeType; // instance variable belongs to instance. it is a usual field
12+ class procedure SetSomeClassVar(const AValue: TSomeType); static;
13+ public
14+ class property SomeProperty: TSomeType read FSomeClassVar write SetSomeClassVar; // class property - belongs to a class
15+ property SomeInstanceProp: TSomeType read FSomeIntanceVar;
16+ end;
17+
18+ { TSomeClass }
19+
20+ class procedure TSomeClass.SetSomeClassVar(const AValue: TSomeType);
21+ begin
22+ FSomeClassVar := AValue;
23+ end;
24+
1125 var
12- FSomeIntanceVar: TSomeType; // instance variable belongs to instance. it is a usual field
13- class procedure SetSomeClassVar(const AValue: TSomeType); static;
14- public
15- class property SomeProperty: TSomeType read FSomeClassVar write SetSomeClassVar; // class property - belongs to a class
16- property SomeInstanceProp: TSomeType read FSomeIntanceVar;
17- end;
18-
19-{ TSomeClass }
20-
21-class procedure TSomeClass.SetSomeClassVar(const AValue: TSomeType);
22-begin
23- FSomeClassVar := AValue;
24-end;
25-
26-var
27- SomeClass: TSomeClass;
28-begin
29- SomeClass.SomeProperty := 1;
30- WriteLn(SomeClass.SomeProperty);
31-end.
26+ SomeClass: TSomeClass;
27+ begin
28+ SomeClass.SomeProperty := 1;
29+ WriteLn(SomeClass.SomeProperty);
30+ end.
3231```
3332
3433### Class constants
35-
36-``` pascal
34+```
3735type
38- TSomeClass = class
39- strict private
40- const
41- PrivateConst = 1;
42- type
43- PrivateType = type Integer;
44- var
45- FPrivateField: PrivateType;
46- public
47- procedure DoSomething(Value: PrivateType = PrivateConst);
48- function ReturnSomething: PrivateType;
49- property SomeProp: PrivateType read FPrivateField write FPrivateField default PrivateConst;
50- end;
51-
52- procedure TSomeClass.DoSomething(Value: PrivateType = PrivateConst);
53- begin
54- end;
55-
56- function TSomeClass.ReturnSomething: PrivateType;
57- begin
58- Result := PrivateConst;
59- end;
60-
61-begin
62-end.
36+ TSomeClass = class
37+ strict private
38+ const
39+ PrivateConst = 1;
40+ type
41+ PrivateType = type Integer;
42+ var
43+ FPrivateField: PrivateType;
44+ public
45+ procedure DoSomething(Value: PrivateType = PrivateConst);
46+ function ReturnSomething: PrivateType;
47+ property SomeProp: PrivateType read FPrivateField write FPrivateField default PrivateConst;
48+ end;
49+
50+ procedure TSomeClass.DoSomething(Value: PrivateType = PrivateConst);
51+ begin
52+ end;
53+
54+ function TSomeClass.ReturnSomething: PrivateType;
55+ begin
56+ Result := PrivateConst;
57+ end;
58+
59+ begin
60+ end.
6361```
6462
6563### Nested classes
66-
67-``` pascal
64+```
6865type
69- TSomeClass = class
70- strict private
71- type
72- TPrivateNestedClass = class
66+ TSomeClass = class
67+ strict private
68+ type
69+ TPrivateNestedClass = class
70+ public
71+ procedure DoSomething;
72+ end;
7373 public
74- procedure DoSomething;
74+ type
75+ TNestedClass = class
76+ public
77+ procedure DoSomething;
78+ end;
79+ class procedure Test; virtual;
7580 end;
76- public
77- type
78- TNestedClass = class
81+
82+ TDescendant = class(TSomeClass)
7983 public
80- procedure DoSomething;
84+ class procedure Test; override;
8185 end;
82- class procedure Test; virtual;
83- end;
84-
85- TDescendant = class(TSomeClass)
86- public
87- class procedure Test; override;
88- end;
89-
90-procedure TSomeClass.TPrivateNestedClass.DoSomething;
91-begin
92- WriteLn('TSomeClass.TPrivateNestedClass.DoSomething: ok');
93-end;
94-
95-procedure TSomeClass.TNestedClass.DoSomething;
96-begin
97- WriteLn('TSomeClass.TNestedClass.DoSomething: ok');
98-end;
99-
100-class procedure TSomeClass.Test;
101-var
102- P: TPrivateNestedClass;
103- N: TNestedClass;
104-begin
105- P := TPrivateNestedClass.Create;
106- P.DoSomething;
107- P.Free;
108- N := TNestedClass.Create;
109- N.DoSomething;
110- N.Free;
111-end;
112-
113-class procedure TDescendant.Test;
114-var
115- N: TNestedClass;
116-begin
117- N := TNestedClass.Create;
118- N.DoSomething;
119- N.Free;
120-end;
121-
122-begin
123- TSomeClass.Test;
124- TDescendant.Test;
125-end.
86+
87+ procedure TSomeClass.TPrivateNestedClass.DoSomething;
88+ begin
89+ WriteLn('TSomeClass.TPrivateNestedClass.DoSomething: ok');
90+ end;
91+
92+ procedure TSomeClass.TNestedClass.DoSomething;
93+ begin
94+ WriteLn('TSomeClass.TNestedClass.DoSomething: ok');
95+ end;
96+
97+ class procedure TSomeClass.Test;
98+ var
99+ P: TPrivateNestedClass;
100+ N: TNestedClass;
101+ begin
102+ P := TPrivateNestedClass.Create;
103+ P.DoSomething;
104+ P.Free;
105+ N := TNestedClass.Create;
106+ N.DoSomething;
107+ N.Free;
108+ end;
109+
110+ class procedure TDescendant.Test;
111+ var
112+ N: TNestedClass;
113+ begin
114+ N := TNestedClass.Create;
115+ N.DoSomething;
116+ N.Free;
117+ end;
118+
119+ begin
120+ TSomeClass.Test;
121+ TDescendant.Test;
122+ end.
126123```
127124
128125---
129-*From the Free Pascal wiki, page "extended class syntax", as it stood on 2020-02-14 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
126+*From the Free Pascal wiki, page "extended class syntax", as the Internet Archive kept it on 2022-08-08. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history