Title: use Delphi checking type facility for your own types?
{
Delphi prüft die Typen der übergebenen Variablen für entsprechende
var Parameter einer Prozedure / Funtion anhand der geführten Typen.
Dabei wird unterschieden zwischen strenge und schwache Typendeklarationen.
Das kann man ausnutzen, um bestimmte Bedingungen zu kreieren, die
beim Programmieren respektiert sein müssen: Delphi wird u.U. einen
Compiler-Fehler produzieren.
}
{
Delphi checks the type of variables you pass in a procedure or a function
call for declared var parameters.
It makes a difference if you make a strong or weak type declaration.
You can use this casuality to create a design time proofing rule, proofing
the code at design time. Delphi won't compile a code part if it's
"strong checked".
}
type
// Strenge Prüfung wird veranlasst
// Strong checking will be operated
TCheckedIniFileNameType = type
string;
// Schwache Prüfung bei dieser Typ-Deklaration
// Weak checking for this type declaration
TSimpleIniFileNameType = string;
{ This will be strong checked }
procedure CheckedTypeProcedure(var IniFileName: TCheckedIniFileNameType);
begin
ShowMessage(IniFileName);
end;
{ This will be less strong checked }
procedure SimpleTypeProcedure(var IniFileName: TSimpleIniFileNameType);
begin
ShowMessage(IniFileName);
end;
{ Weakest form of checking }
procedure NoTypeProcedure(var IniFileName: string);
begin
ShowMessage(IniFileName);
end;
procedure TForm4.Button1Click(Sender: TObject);
var
StringOnly: string;
SimpleIniFileName: TSimpleIniFileNameType;
CheckedIniFileName: TCheckedIniFileNameType;
begin
StringOnly := 'C:\TEST.TXT';
SimpleIniFileName := 'C:\TEST.TXT';
CheckedIniFileName := 'C:\TEST.TXT';
// This will compile...
CheckedTypeProcedure(CheckedIniFileName);
SimpleTypeProcedure(SimpleIniFileName);
SimpleTypeProcedure(StringOnly);
NoTypeProcedure(StringOnly);
NoTypeProcedure(SimpleIniFileName);
// This will not...
CheckedTypeProcedure(SimpleIniFileName);
CheckedTypeProcedure(StringOnly);
SimpleTypeProcedure(CheckedIniFileName);
NoTypeProcedure(CheckedIniFileName);
end;