Ähnlich wie Namespaces in C++, Java und C#
Konflikte bei gleichnamigen Bezeichnern
Mehrere Units können Typen / Funktionen / Variablen mit identischem Namen definieren. Später aufgeführte Units in der uses-Liste verdecken gleichnamige Bezeichner aus vorherigen Units.
Syntax zur Unit-Qualifizierung
Unitname.Bezeichner gibt die Herkunft explizit an, erzwingt die Nutzung der Definition aus der festgelegten Unit und löst Verdeckungskonflikte auf.
Die zwei uses-Bereiche wirken unabhängig voneinander
interface uses: Wirkt nur auf den Interface-Bereich;implementation uses: Wirkt nur auf den Implementierungsbereich. Units im Implementierungsbereich verdecken gleichnamige Bezeichner aus Units des Interface-Bereichs.
Beispiel
Erstelle eine Unit Graphics.pas
unit Graphics;
{$mode objfpc}{$H+}
interface
type
TColor = LongInt;
const
clYellow = 10;
function Red(C:TColor):Integer;
function Green(C:TColor):Integer;
function Blue(C:TColor):Integer;
implementation
function Red(C:TColor):Integer; begin Result:=C shr 16; end;
function Green(C:TColor):Integer; begin Result:=(C shr 8) and 255; end;
function Blue(C:TColor):Integer; begin Result:=C and 255; end;
end.Code-Sprache: JavaScript (javascript)
Erstelle anschließend eine weitere Unit GoogleMapsEngine.pas
unit GoogleMapsEngine;
{$mode objfpc}{$H+}
interface
type
TColor = string; // Vollständig anderer Typ als Graphics.TColor
implementation
end.Code-Sprache: PHP (php)
Es existieren zwei gleichnamige TColor-Typen mit abweichender Struktur
Schreibe nun das Hauptprogramm
program showcolor;
{$mode objfpc}{$H+}
{$apptype CONSOLE}
uses Graphics, GoogleMapsEngine;
var
// Color: TColor; // Fehler: Greift auf das spätere GoogleMapsEngine.TColor (String) zu
Color: Graphics.TColor; // Korrekt, explizite Unit-Qualifizierung
begin
Color := clYellow;
WriteLn(Red(Color), ' ', Green(Color), ' ', Blue(Color));
ReadLn;
end.Code-Sprache: PHP (php)

Kompiliere und starte das Programm

Wenn das Präfix Graphics. weggelassen wird, wird standardmäßig GoogleMapsEngine.TColor verwendet. Warum?
Im Hauptprojekt steht uses Graphics, GoogleMapsEngine;. Da GoogleMapsEngine später angegeben ist, wird bei doppeltem TColor automatisch der Typ aus der späteren Unit, also GoogleMapsEngine.TColor, aufgelöst.
Um beide Typen voneinander abzugrenzen, schreibe explizit Graphics.TColor. Das funktioniert wie Namespaces und verhindert Namenskonflikte.
Fehlerbeispiel
Abweichende TColor-Typen im Interface- und Implementierungsbereich führen zu einem Kompilierfehler
Erstelle eine weitere Unit UnitUsingColors.pas
unit UnitUsingColors;
{$mode objfpc}{$H+}
interface
uses Graphics;
procedure ShowColor(const Color: TColor);
implementation
uses GoogleMapsEngine; // Gleichnamiges TColor im Implementierungsbereich verdeckt das Interface-TColor
// Dieses TColor bezieht sich auf GoogleMapsEngine.TColor
procedure ShowColor(const Color: TColor);
begin
end;
end.Code-Sprache: JavaScript (javascript)
Binde diese Unit im Hauptprogramm mydemo.dpr ein
program showcolor;
{$mode objfpc}{$H+}
{$apptype CONSOLE}
uses UnitUsingColors;
begin
end.Code-Sprache: PHP (php)
Es genügt die bloße Einbindung der Unit, auch ohne Aufruf von Funktionen oder Prozeduren. Wird nichts daraus aufgerufen, überspringt der Compiler die Kompilierung von UnitUsingColors.pas.

Aufschlüsselung der Fehlerursache (Sicht des Compilers):
// Interface-Signatur
procedure ShowColor(const Color: Graphics.TColor);
// Implementierungs-Signatur
procedure ShowColor(const Color: GoogleMapsEngine.TColor);Code-Sprache: JavaScript (javascript)
Passe den Code wie folgt an
unit UnitUsingColors;
{$mode objfpc}{$H+}
interface
uses Graphics;
procedure ShowColor(const Color: TColor);
implementation
uses GoogleMapsEngine;
// Explizite Angabe von TColor aus Graphics, um Verdeckung durch den gleichnamigen Typ zu vermeiden
procedure ShowColor(const Color: Graphics.TColor);
begin
end;
end.Code-Sprache: JavaScript (javascript)

unit UnitUsingColors;
{$mode objfpc}{$H+}
interface
uses Graphics;
procedure ShowColor(const Color: TColor);
implementation
uses GoogleMapsEngine;
// Explizite Angabe von Graphics.TColor zur Vereinheitlichung des Typs
procedure ShowColor(const Color: Graphics.TColor);
begin
WriteLn(Red(Color), Green(Color), Blue(Color));
end;
end.Code-Sprache: JavaScript (javascript)
Zusammenfassung
Unit-Qualifizierung Unitname.Bezeichner steuert die Typherkunft präzise, ohne die Reihenfolge der uses-Klauseln ändern zu müssen, und verhindert Namenskonflikte.