Frage

Der Versuch, meine Pakete für eine Reihe von TFrame-Nachkommen Komponenten neu zu ordnen , ich bin zu finden scheinbar notwendig trennen einige meiner Dienstprogramm TFrame Abkömmlinge auszubrechen aus den Dialogformen, die sie verwenden, vor allem, weil die erstere in die Palette als echte Komponenten registriert sind, und das scheint die IDE manchmal in Bezug auf die Dialogformen zu verwirren, die sie benutzen. Die Dialogformen wiederum durch nicht-visuelle Komponenten genannt, der Teil eines dritten Pakets sind. Dies, so weit , scheint die meisten der Compiler Abhängigkeits Beschwerden / Verwirrungen gehen weg. (Ich bin noch nicht aus, jedoch).

Beim Kompilieren des Pakets mit den Dialogformen (die die Frames nennen), erhalte ich die Warnung "Unit 'MyFrames' implizit importiert in Paket 'MyDialogForms'"

Da es als Compiler-Warnung erscheint, habe ich schon vor langer Zeit den Eindruck bekommen, dass „implizit importieren“ eine Einheit ist in der Regel nicht eine gute Sache. Gibt es bestimmte Fälle, in denen dies nicht der Fall ist? das heißt, wo implizit eine Einheit ist in Ordnung, und / oder eine entsprechende Praxis? ... und wenn ja, was sind die spezifischen Fälle?

Import
War es hilfreich?

Lösung

Hier ist das Problem:

Sie können nur eine Kopie einer Einheit in Ihrem Programm haben. Wenn Sie versuchen, die gleiche Einheit zweimal über Pakete geladen wird, wird es eine Ausnahme ausgelöst und das Paket wird zum zweiten Mal nicht geladen werden. Die Art und Weise, dies zu vermeiden, ist Ihre Pakete so zu strukturieren, dass keine Einheit in mehr als eine von ihnen verwendet wird.

Der Code für jede Einheit, die Sie kompilieren hat im Paket sein. Der Compiler wird mit allen Einheiten beginnen Sie in der erklären enthält , aber alle andere von diesen Einheiten verwendeten Einheiten haben auch in kompiliert werden, so dass es erreichbar sein wird, es sei denn, diese Einheiten in einem anderen Paket enthalten sind die unter aufgeführt erfordert . Diese Extras sind die „implizit importiert“ Einheiten. Das Problem ist, sie importiert implizit , nicht explizit angegeben in der enthält , wo sie bequem im Projektmanager angezeigt werden nach rechts ab. Das bedeutet, dass Sie nicht bemerken können, dass Ihr Gerät in einem Paket ist, und es in einer anderen bis Ende setzen. Dann, wenn Sie versuchen, Ihr Programm und laden Sie die Pakete zu laufen, Dinge zu brechen. Deshalb ist der Compiler Sie warnt.

Es ist eine Warnung, und kein Fehler, aus einem Grund. Solange Sie verstehen, wie das System funktioniert, ist es technisch sicher implizite Importe zu verwenden. Denken Sie daran, dass diese Einheiten enden in dem Paket auf, ob Sie sie erklären oder nicht. Aber dann wieder, da sie endet dort oben, ob Sie sie erklären oder nicht, ist es wahrscheinlich einfacher, nur um sie offiziell hinzufügen und Sie sich die Mühe sparen.

Andere Tipps

1 für Mason Antwort . Der Ort, wo implizit importiert Einheiten zu einem Problem an einem großen Projekt ist, wo es exponentiell schwieriger wird, den Überblick über Einheiten zu halten, die in von jedem beliebigen Ort verbunden sind.

Ich finde, der beste Weg, mit Abstand einen Ordner pro Paket haben, und dieser Ordner enthält alle Dateien für das Paket. Wenn ich eine „implizite Import“ Warnung angezeigt wird, entweder ich hinzufügen das gewünschte Paket, oder das Gerät zum Paket hinzufügen. So alle Einheiten sind in dem Paket angegeben, das sie enthält, und sie sind alle im selben Ordner. Ich füge nie Ordner in den Suchpfad, denn jedes Projekt kennt alle seine Dateien direkt.

Die Struktur ist wirklich nicht sehr schwierig zu warten und es schützt vor Problemen, bei denen verschiedene Einheiten unterschiedliche Versionen einer Datei enthalten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top