Einzelnen Beitrag anzeigen

Benutzerbild von sakura
sakura

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

Re: Namespaces in Delphi 2005

  Alt 6. Dez 2004, 09:47
Namespaces in Delphi 8


Zuerst möchte ich noch einmal darauf eingehen, wie Delphi 8 mit Namespaces umgegangen ist. Hierzu möchte ich zwei einfache Source-Dateien nutzen:
Delphi-Quellcode:
unit Sample.Controls.Base;

interface

type
  TControl = class
  end;

implementation

end.
Delphi-Quellcode:
unit Sample.Controls.Listview;

interface

type
  TListview = class(TControl)
  end;

type
  TItem = class
  end;

implementation

end.
Wen man diese Dateien in Delphi 8 in ein Package kompiliert und sich das Ergebnis mit Hilfe eines Reflektor-Tools betrachtet, so stellt man fest, dass das Package zwei Namespaces enthält: Sample.Controls.Base und Sample.Controls.Listview.

Öffnet man jetzt den Namespace Sample.Controls.Base, so sieht man, dass dieser zwei Klassen enthält. Die eine ist unsere TControl Klasse, die andere heißt Unit. Diese zweite, spezielle Klasse enthält den Initialisierungs- und Finalisierungscode der Sample.Controls.Base Unit, sowie alle Funktionen und Prozeduren, welche auf Unit-Level deklariert/implementiert wurden. Entsprechend sind im Namespace Sample.Controls.Listview die Klassen TListview und TItem sowie die spezielle Klasse Unit enthalten.

Wen man jetzt weitere Units dem Package hinzufügt, so wird man feststellen, dass jede Unit ihren eigenen, eindeutigen Namespace mit allen Klassen sowie der Klasse Unit dem Package hinzufügt.

So, wo ist jetzt das Problem?

Units sind viel einfacher zu benutzen und zu verwalten wenn diese jeweils nur wenige Klassen enthalten. Wie dem auch sei, erstellt man Libraries/Packages mit vielen Units, so sind in den Assemblies entsprechend viele Namespaces enthalten. Das stört uns als Delphientwickler nicht weiter, da der Compiler sich um diese interna sorgt. Allerdings ist dieser Mechanismus für Entwickler, welche andere .NET Sprachen nutzen, sehr umständlich. C# Programmierer müssen so z.B. jeden Namespaces separat importieren was deren Code nur unnötig aufbläht. Auch hat es den Nachteil, dass Delphi.NET Assemblies für Programmierer anderer .NET Sprachen schwerer zu verstehen sind. Wollen/müssen diese den vollständigen Typennamen nutzen, so müssen sie jedes Mal etwas wie das folgende tippen: Sample*.Con*trols*.Base*.TControl oder Sample.Con*trols.Listview.TListview.
Daniel W.