Delphi for .NET FCL Examples Reference
| CollectionBase | namespace |
| System.Collections |
Declaration
CollectionBase = class(System.Object, IList, ICollection, IEnumerable); abstract;
Description
Provides the abstract base class for a strongly typed collection.
Example
The following code example implements the CollectionBase class and uses that implementation to create a collection of Int16 objects.
program System_Collections_CollectionBase; {$APPTYPE CONSOLE} {$AUTOBOX ON} uses System.Collections; type Int16Collection = class(CollectionBase) public function get_Item(index: Integer): Int16; procedure set_Item(index: Integer; const Value: Int16); function Add(value: Int16): Integer; function IndexOf(value: Int16): Integer; procedure Insert(index: Integer; value: Int16); procedure Remove(value: Int16); function Contains(value: Int16): Boolean; property Item[index: Integer]: Int16 read get_Item write set_Item; default; strict protected procedure OnInsert(index: Integer; value: System.Object); override; procedure OnRemove(index: Integer; value: System.Object); override; procedure OnSet(index: Integer; oldValue: System.Object; newValue: System.Object); override; procedure OnValidate(value: System.Object); override; end; SamplesCollectionBase = class public class procedure Main; private class procedure PrintIndexAndValues (myCol: Int16Collection); end; { SamplesCollectionBase } class procedure SamplesCollectionBase.Main; var i: Integer; myI16: Int16Collection; begin // Creates and initializes a new CollectionBase myI16 := Int16Collection.Create; myI16.Add(Int16(1)); myI16.Add(Int16(2)); myI16.Add(Int16(3)); myI16.Add(Int16(5)); myI16.Add(Int16(7)); // Displays the contents of the //collection using the enumerator Console.WriteLine('Initial contents of the collection:'); PrintIndexAndValues(myI16); // Searches the collection with Contains and IndexOf Console.WriteLine('Contains 3: {0}', myI16.Contains(3)); Console.WriteLine('2 is at index {0}.', myI16.IndexOf(2)); Console.WriteLine; // Inserts an element into the collection at index 3 myI16.Insert(3, (Int16(13))); Console.WriteLine('Contents of the collection after inserting at index 3:'); PrintIndexAndValues(myI16); // Gets and sets an element using the index. myI16[4] := 123; Console.WriteLine('Contents of the collection after setting the element at index 4 to 123:'); PrintIndexAndValues(myI16); // Removes an element from the collection myI16.Remove((Int16(2))); // Displays the contents of //the collection using the index. Console.WriteLine('Contents of the collection after removing the element 2:'); i := 0; while (i < myI16.Count) do begin Console.WriteLine('[{0}]: {1}', i, myI16[i]); i := i + 1; end; end; class procedure SamplesCollectionBase.PrintIndexAndValues (myCol: Int16Collection); var myEnumerator: System.Collections.IEnumerator; i: Integer; begin i := 0; myEnumerator := myCol.GetEnumerator; while myEnumerator.MoveNext do begin Console.WriteLine('[{0}]: {1}', i, myEnumerator.Current); i:=i+1; end; Console.WriteLine; end; { Int16Collection } function Int16Collection.Add(value: Int16): Integer; begin Result := List.Add(value); end; function Int16Collection.Contains(value: Int16): Boolean; begin // If value is not of type Int16, this will return false. Result := List.Contains(value); end; function Int16Collection.get_Item(index: Integer): Int16; begin Result := (Int16(List[index])); end; function Int16Collection.IndexOf(value: Int16): Integer; begin Result := List.IndexOf(value); end; procedure Int16Collection.Insert (index: Integer; value: Int16); begin List.Insert(index, value); end; procedure Int16Collection.OnInsert (index: Integer; value: System.Object); begin if (value.GetType <> System.Type.GetType('System.Int16')) then raise ArgumentException.Create ('value must be of type Int16.', 'value'); end; procedure Int16Collection.OnRemove (index: Integer; value: System.Object); begin if (value.GetType <> System.Type.GetType('System.Int16')) then raise ArgumentException.Create ('value must be of type Int16.', 'value'); end; procedure Int16Collection.OnSet (index: Integer; oldValue, newValue: System.Object); begin if (newValue.GetType <> System.Type.GetType('System.Int16')) then raise ArgumentException.Create ('newValue must be of type Int16.', 'newValue'); end; procedure Int16Collection.OnValidate (value: System.Object); begin if (value.GetType <> System.Type.GetType('System.Int16')) then raise ArgumentException.Create ('value must be of type Int16.'); end; procedure Int16Collection.Remove(value: Int16); begin List.Remove(value); end; procedure Int16Collection.set_Item (index: Integer; const Value: Int16); begin List[index] := value; end; //test program begin SamplesCollectionBase.Main; end. |
Example output
Initial contents of the collection: [0]: 1 [1]: 2 [2]: 3 [3]: 5 [4]: 7 Contains 3: True 2 is at index 1. Contents of the collection after inserting at index 3: [0]: 1 [1]: 2 [2]: 3 [3]: 13 [4]: 5 [5]: 7 Contents of the collection after setting the element at index 4 to 123: [0]: 1 [1]: 2 [2]: 3 [3]: 13 [4]: 123 [5]: 7 Contents of the collection after removing the element 2: [0]: 1 [1]: 3 [2]: 13 [3]: 123 [4]: 7
Looking for Delphi for .NET examples? Look no further, Delphi for .NET FCL Examples Reference is what you are looking for!

