Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Namespaces in Delphi 2005

  Alt 6. Dez 2004, 10:04
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.
Daniel W.