About the author
Sets and enumerations have been in Delphi since the beginning of Delphi.
Here's an example program. The example program gives the exact output in both Delphi 7 and Delphi 8.
However, if you are using sets or enumerations to talk to other .NET programs, you should be aware that there are some differences that were not documented.
In particular, in Delphi, whatever the value of an enumeration, when it becomes part of a set, the value of an enumeration in the set itself is multiplied by 2.
The differences become fundamental, when you examine how it works in C#, and how it works in Delphi, and you want to talk to a CLR routine using Delphi.
More on that in part 2 of this article. In the meantime, can you figure out the output of the following program?
program SetExamples; {$APPTYPE CONSOLE} uses SysUtils; type ASet = (A1=1, A2=2, A3=4, A4=8, A5=16); ASets = set of ASet; var Set1: ASet; Sets: ASets; begin Set1 := A1; Sets := [Set1]; if A1 in Sets then WriteLn('A1'); if A1 = Set1 then WriteLn('Passed'); WriteLn('Set1 value: ', Ord(Set1)); WriteLn('Sets value: ', Integer(Sets)); end.
A method pointer is now the same as a global procedure, ie, procedure of object = procedure.