Freigeben über


Importdeklarationen: Das open-Schlüsselwort (F#)

Eine Importdeklaration gibt ein Modul oder einen Namespace an, auf dessen Elemente Sie verweisen können, ohne einen vollqualifizierten Namen zu verwenden.

open module-or-namespace-name

Hinweise

Wenn auf Code immer mit dem vollqualifizierten Namespace oder Modulpfad verwiesen wird, kann dies dazu führen, dass Code schwierig zu schreiben, zu verwalten und zu lesen ist.Stattdessen können Sie für häufig verwendete Module und Namespaces das open-Schlüsselwort angeben, damit Sie statt des vollqualifizierten Namens die Kurzform des Namens verwenden können, wenn Sie auf einen Member des Moduls bzw. Namespaces verweisen.Dieses Schlüsselwort entspricht dem using-Schlüsselwort in C#, usingnamespace in Visual C++ und Imports in Visual Basic.

Das bereitgestellte Modul oder der bereitgestellte Namespace muss sich im gleichen Projekt oder in einem Projekt oder einer Assembly befinden, auf das bzw. die verwiesen wird.Wenn dies nicht der Fall ist, können Sie einen Verweis auf das Projekt hinzufügen oder die -reference-Befehlszeilenoption (oder ihre Abkürzung -r) verwenden.Weitere Informationen finden Sie unter Compileroptionen (F#).

Die Importdeklaration macht die Namen im Code nach der Deklaration bis zum Ende des einschließenden Namespaces, des einschließenden Moduls oder der einschließenden Datei verfügbar.

Wenn Sie mehrere Importdeklarationen verwenden, müssen sie jeweils in einer eigenen Zeilen enthalten sein.

Im folgenden Code wird die Verwendung des open-Schlüsselworts zum Vereinfachen von Code veranschaulicht.

// Without the import declaration, you must include the full
// path to .NET Framework namespaces such as System.IO.
let writeToFile1 filename (text: string) =
  let stream1 = new System.IO.FileStream(filename, System.IO.FileMode.Create)
  let writer = new System.IO.StreamWriter(stream1)
  writer.WriteLine(text)

// Open a .NET Framework namespace.
open System.IO

// Now you do not have to include the full paths.
let writeToFile2 filename (text: string) =
  let stream1 = new FileStream(filename, FileMode.Create)
  let writer = new StreamWriter(stream1)
  writer.WriteLine(text)

writeToFile2 "file1.txt" "Testing..."

Der F#-Compiler gibt keinen Fehler und keine Warnung aus, wenn der gleiche Name in mehreren geöffneten Modulen oder Namespaces vorhanden ist und daher Mehrdeutigkeiten auftreten.Wenn Mehrdeutigkeiten auftreten, hat in F# das zuletzt geöffnete Modul bzw. der zuletzt geöffnete Namespace Vorrang.Beispielsweise hat im folgenden Code empty die Bedeutung Seq.empty, obwohl empty sowohl im List-Modul als auch im Seq-Modul vorhanden ist.

open List
open Seq
printfn "%A" empty

Gehen Sie daher vorsichtig vor, wenn Sie Module oder Namespaces, z. B. List oder Seq, öffnen, die Member mit identischen Namen enthalten. Ziehen Sie in Betracht, stattdessen qualifizierte Namen zu verwenden.Vermeiden Sie stets, dass der Code von der Reihenfolge der Importdeklarationen abhängig ist.

Namespaces, die standardmäßig geöffnet sind

Einige Namespaces werden so häufig in F#-Code verwendet, dass sie implizit geöffnet werden, ohne dass eine explizite Importdeklaration erforderlich ist.In der folgenden Tabelle werden die standardmäßig geöffneten Namespaces dargestellt.

Namespace

Beschreibung

Microsoft.FSharp.Core

Enthält grundlegende F#-Typdefinitionen für integrierte Datentypen, z. B. int und float.

Microsoft.FSharp.Core.Operators

Enthält grundlegende arithmetische Operationen, z. B. + und *.

Microsoft.FSharp.Collections

Enthält unveränderliche Auflistungsklassen, z. B. List und Array.

Microsoft.FSharp.Control

Enthält Typen für Steuerelementkonstrukte, z. B. verzögerte Auswertung und asynchrone Workflows.

Microsoft.FSharp.Text

Enthält Funktionen für formatierte EA, z. B. die printf-Funktion.

AutoOpen-Attribut

Sie können das AutoOpen-Attribut auf eine Assembly anwenden, wenn beim Verweisen auf die Assembly automatisch ein Namespace oder Modul geöffnet werden soll.Sie können auch das AutoOpen-Attribut auf ein Modul anwenden, um dieses Modul automatisch zu öffnen, wenn das übergeordnete Modul oder der übergeordnete Namespace geöffnet wird.Weitere Informationen finden Sie unter Core.AutoOpenAttribute-Klasse (F#).

RequireQualifiedAccess-Attribut

Einige Module, Datensätze oder union-Typen können das RequireQualifiedAccess-Attribut angeben.Wenn Sie Elemente, die Module, Datensätze oder Gewerkschaften verweisen, müssen Sie einen qualifizierten Namen unabhängig davon, ob eine Import-Deklaration enthalten.Wenn Sie dieses Attribut strategisch auf Typen, die in der Regel definieren verwendet Namen, Ihnen helfen, vermeiden Namenskonflikte und machen dadurch Code stabiler zu Änderungen in Bibliotheken.Weitere Informationen finden Sie unter Core.RequireQualifiedAccessAttribute-Klasse (F#).

Siehe auch

Referenz

Namespaces (F#)

Module (F#)

Weitere Ressourcen

F#-Sprachreferenz