And here the Genericpair unit's code:
unit Genericpair;
{$mode objfpc}{$H+}
interface
uses
Classes,SysUtils,Dialogs;
type
generic TGenericpair<_T1,_T2> = class
private //PRIVATE ZONE
first : _T1;
second : _T2;
protected //PROTECTED ZONE
public //PUBLIC (Anyone can see this zone)
constructor Create(T1_:_T1 ;T2_:_T2); overload; //Public Class Method
//The Overload allows you to have different versions of the same named
//function/procedure with different arguments
//OVERLOAD : SAME NAME OF FUNCTION WITH DIFFERENT ARGUMENTS IN THE SAME CLASS
//Destructor (can be only ONE)
Destructor Destroy; override; //Public Class Method
//The Override must be specified since we are overriding the virtual TObject destroy method.
//At the end of a destructor, you should call Inherited to invoke the parent destructor.
//OVERRIDE : SAME NAME OF FUNCTION WITH SAME ARGUMENTS IN DIFFERENT CLASSES
function GetFirst():_T1; //Public Object Method
procedure SetFirst(T1_:_T1); //Public Object Method
function GetSecond():_T2; //Public Object Method
procedure SetSecond(T2_:_T2); //Public Object Method
end;
implementation
//implementation of the methods here !!!
//Class Method
constructor TGenericpair.Create(T1_:_T1 ;T2_:_T2); overload;
begin
self.First:=T1_;
self.Second:=T2_;
end;
//Class Method
Destructor TGenericpair.Destroy; //override; //not needed here !!!
begin
showmessage('Pair destroyed');
inherited; // Always call the parent destructor after running your own code
end;
//Object Method
function TGenericpair.GetFirst():_T1;
begin
result := self.First;
end;
//Object Method
procedure TGenericpair.SetFirst(T1_:_T1);
begin
self.First := T1_;
end;
//Object Method
function TGenericpair.GetSecond():_T2;
begin
result := self.Second;
end;
//Object Method
procedure TGenericpair.SetSecond(T2_:_T2);
begin
self.Second := T2_;
end;
end.
That's all for now.
Hope we made this argument a bit clearer than it can appear the first time.
The main advice is the same: try it yourself, modify the code to get a result you have in mind, check the real result.
And if you get errors don't be sad: they're a big chance to improve your knowledge.
Thanks.