Namespaces in Delphi 2005
Lädt man jetzt das zuvor in Delphi 8 erstellte
Package und kompiliert es erneut und schaut sich das Ergebnis in einem Reflektor-Tool an, so wird man feststellen, dass das erstellte Assembly etwas anders strukturiert ist. Es enthält jetzt zwei Namespaces:
Sample.Controls und
Sample.Controls.Units.
Wenn man den
Sample.Controls Namespace näher betrachtet, so findet man dort die Klassen
TControl,
TListview und
TItem. Der Delphi 2005 Compiler hat allen Klassen in einen Namespace platziert!
Der
Sample.Controls.Units Namespace ist entsprechend ähnlich aufgebaut und enthält nun zwei Klassen:
Base und
Listview. Dieses sind die speziellen Klassen jeder
Unit, welche wir vorher auch bereits hatten. Im Unterschied zu Delphi 8 wird jetzt nicht mehr für jede
Unit ein eigener Namespace erzeugt.
Dieses ist eine großer Erleichterung für andere Entwickler. C# Programmierer benötigen jetzt nur noch ein
using Statement, um Zugriff auf alle unsere Klassen zu erhalten. Um jetzt Zugriff auf eine unserer Klassen zu erhalten, reicht folgender Code:
Sample.*Controls.*TCon*trol.
Fügt man jetzt dem
Package diese dritte
Unit hinzu:
Delphi-Quellcode:
unit Sample.Graphics.Screen;
interface
type
TScreen =
class
end;
implementation
end.
so wird man feststellen, dass das
Package jetzt zwei neue Namespaces
Sample.Graphics namespace und
Sample.Graphics.Units enthält.
Wo kommt diese jetzt her?
Der Delphi Compiler betrachtet jeden Unitnamen genauer. Sind in dem Unitnamen Punkte (.) enthalten, so wird alles, was links vom letzten Punkt steht als Teil des zu generierenden Namespace genutzt. Anders gesagt, wenn eine
Unit Sample.Controls.Buttons benannt wird, so werden die darin enthaltenen Klassen in den Namespace
Sample.Controls gebracht, heißt eine
Unit Sample.*Controls.*Web.*DB.Grid, so werden alle darin enthaltenen Klassen in den Namespace
Sample.*Controls.*Web.*DB gebracht.
Für Unitnamen, die keinen Punkt im Namen enthalten, nutzt der Compiler den
Standard Namespace aus dem Dialog
Projektoptionen:
Wurde in diesem Dialog kein Standard Namespace angegeben, so nutzt der Compiler den Namen der
Unit als Namespace. Daher wird eine
Unit mit dem Namen
Graphics.pas dann auch einen Namespace
Graphics erstellen.