Sign in Join
Wiki copytemporary

extended class syntax: what changed

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

OldNewLine
11### Static fields, static properties, regular fields and regular properties
2-```
2+
3+``` pascal
34type
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-
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
2511 var
26- SomeClass: TSomeClass;
27- begin
28- SomeClass.SomeProperty := 1;
29- WriteLn(SomeClass.SomeProperty);
30- end.
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.
3132```
3233
3334### Class constants
34-```
35+
36+``` pascal
3537type
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.
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.
6163```
6264
6365### Nested classes
64-```
66+
67+``` pascal
6568type
66- TSomeClass = class
67- strict private
68- type
69- TPrivateNestedClass = class
70- public
71- procedure DoSomething;
72- end;
69+ TSomeClass = class
70+ strict private
71+ type
72+ TPrivateNestedClass = class
7373 public
74- type
75- TNestedClass = class
76- public
77- procedure DoSomething;
78- end;
79- class procedure Test; virtual;
74+ procedure DoSomething;
8075 end;
81-
82- TDescendant = class(TSomeClass)
76+ public
77+ type
78+ TNestedClass = class
8379 public
84- class procedure Test; override;
80+ procedure DoSomething;
8581 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.
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.
123126```
124127
125128---
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).*
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).*

Back to history