Ist "implizit importiert" immer eine schlechte Sache in Delphi-packages?
Versucht, neu anordnen, meine Pakete für eine Reihe von TFrame-Nachkomme Komponenten, ich finde es scheinbar notwendig ist, brechen einige meiner Dienstprogramm TFrame Nachkommen trennen aus dem dialog-Formen, die Sie verwenden, vor allem, weil die ehemalige registriert sind, um die palette als echte Komponenten und das scheint zu verwirren, die IDE manchmal mit Bezug auf die dialog-Formen, die Sie verwenden. Die dialog-Formen wiederum sind aufgerufen, durch nicht-visuelle Komponenten, die Teil des Dritten Pakets. Dies so weit, scheint die meisten compiler Abhängigkeit-Beschwerden /Verwirrungen Weg. (Ich bin mir noch nicht bekannt, jedoch).
Beim kompilieren das Paket mit dem Dialogfeld Formulare (die rufen Sie die Bilder), ich erhalte die Warnung "Einheit " MyFrames' implizit importiert-Paket "MyDialogForms'"
Da zeigt es sich als eine compiler-Warnung, ich habe vor langer Zeit den Eindruck bekommen, dass "implizit importieren" eine Einheit ist in der Regel nicht eine gute Sache. Gibt es bestimmte Fälle, wo das nicht der Fall ist? also dort, wo implizit importieren einer Einheit in Ordnung ist, und/oder eine entsprechende Praxis?... und wenn ja, was sind diese besonderen Fälle?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist das Problem:
Können Sie nur eine Kopie von einem Gerät in Ihrem Programm. Wenn Sie versuchen, laden Sie die gleiche Einheit zweimal über Pakete, es wird eine Ausnahme ausgelöst und das Paket nicht laden das zweite mal. Die Art und Weise, dies zu vermeiden ist, um die Struktur der Pakete, so dass keine Einheit in mehr als einer von Ihnen.
Den code jeder Einheit, die Sie kompilieren, muss das Paket. Der compiler wird gestartet mit allen Einheiten, die Sie erklären, in der enthält Abschnitt, aber alle anderen Einheiten diejenigen Einheiten, die auch zusammengestellt werden, so dass es erreichbar sein wird, es sei denn, diese Einheiten enthalten sind, die in einem anderen Paket, die unter aufgeführt wird erfordert. Diese extras sind die "implizit importiert" - Einheiten. Problem ist, Sie sind importiert implizit, die nicht ausdrücklich in der enthält Abschnitt, wo Sie dann bequem in der Projekt-Manager rechts ab. Dies bedeutet, dass Sie vielleicht nicht bemerken, dass Ihr Gerät in ein Paket und legt es in eine andere. Dann, wenn Sie versuchen, führen Sie das Programm und laden Sie die Pakete, die Dinge brechen. Das ist, warum der compiler warnt Sie darüber.
Es ist eine Warnung und kein Fehler ist, für einen Grund. Solange Sie verstehen, wie das system funktioniert, es ist technisch sicher zu verwenden implizite Importe. Denken Sie daran, dass diese Einheiten sind schließlich in das Paket, ob Sie zu erklären oder nicht. Aber dann wieder, denn Sie sind zu landen gibt, ob Sie zu erklären oder nicht, ist es wahrscheinlich einfacher, nur um offiziell fügen Sie Sie und sparen Sie sich den ärger.
+1 für Mason ' s Antwort. Der Ort, wo implizit importiert Einheiten zu einem problem geworden ist, an einem großen Projekt, wo wird es exponentiell schwieriger zu verfolgen-Einheiten, die miteinander verbunden sind von wo auch immer.
Finde ich der beste Weg bei weitem, um einen Ordner pro Paket, und in diesem Ordner enthält alle Dateien für das Paket. Wenn ich sehe, eine "implizite import" - Warnung, dass ich entweder das benötigte Paket, oder fügen Sie das Gerät der Verpackung. Also alle Einheiten, angegeben sind in dem Paket, das Sie enthält, und Sie sind alle im gleichen Ordner. Ich habe nie Ordner hinzufügen, um die Suche Weg, denn jedes Projekt kennt alle seine Dateien direkt.
Die Struktur ist wirklich nicht sehr schwer zu pflegen, und es schützt Sie vor Problemen, bei denen verschiedene Einheiten enthalten verschiedene Versionen einer Datei.