İçeri aktarma bildirimleri: Anahtar open sözcük

İçeri aktarma bildirimi , tam ad kullanmadan öğelerine başvurabileceğiniz bir modül veya ad alanı belirtir.

Sözdizimi

open module-or-namespace-name
open type type-name

Açıklamalar

Her seferinde tam ad alanını veya modül yolunu kullanarak koda başvurmak, yazması, okuması ve bakımı zor kod oluşturabilir. Bunun yerine, sık kullanılan modüller ve ad alanları için anahtar sözcüğünü open kullanabilirsiniz, böylece bu modülün veya ad alanının bir üyesine başvurduğunuz zaman tam ad yerine adın kısa biçimini kullanabilirsiniz. Bu anahtar sözcük C# dilinde, using namespace Visual C++'da ve Imports Visual Basic'te anahtar sözcüğüne benzerusing.

Sağlanan modül veya ad alanı aynı projede veya başvuruda bulunılan bir projede veya derlemede olmalıdır. Değilse, projeye bir başvuru ekleyebilir veya komut satırı seçeneğini (veya kısaltmasını, -r) kullanabilirsiniz-reference. Daha fazla bilgi için bkz . Derleyici Seçenekleri.

İçeri aktarma bildirimi, adları bildirimden sonra gelen kodda, kapsayan ad alanının, modülün veya dosyanın sonuna kadar kullanılabilir hale getirir.

Birden çok içeri aktarma bildirimi kullandığınızda, bunlar ayrı satırlarda görünmelidir.

Aşağıdaki kod, kodu basitleştirmek için anahtar sözcüğün open kullanımını gösterir.

// 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..."

F# derleyicisi, birden fazla açık modülde veya ad alanında aynı ad oluştuğunda belirsizlikler oluştuğunda bir hata veya uyarı yaymaz. Belirsizlikler oluştuğunda, F# daha yakın zamanda açılan modülü veya ad alanını tercih eder. Örneğin, aşağıdaki kodda hem hem Seq de modüllerinde bulunmasına List rağmen empty anlamına gelirSeq.empty. empty

open List
open Seq
printfn %"{empty}"

Bu nedenle, aynı adlara sahip üyeler içeren veya gibi List modülleri veya Seq ad alanlarını açtığınızda dikkatli olun; bunun yerine, nitelenmiş adları kullanmayı göz önünde bulundurun. Kodun içeri aktarma bildirimlerinin sırasına bağlı olduğu herhangi bir durumdan kaçınmanız gerekir.

Açık tür bildirimleri

F# aşağıdaki gibi bir türü destekler open :

open type System.Math
PI

Bu, türdeki tüm erişilebilir statik alanları ve üyeleri kullanıma sunar.

Statik üyeleri kullanıma açmak için F#tanımlı kayıt ve ayrımcı birleşim türleri de open kullanabilirsiniz. Ayrımcı birleşimler söz konusu olduğunda, birleşim servis taleplerini de ortaya çıkarabilirsiniz. Bu, açmak istemediğiniz bir modülün içinde bildirilen bir türdeki birleşim durumlarına erişmek için yararlı olabilir, örneğin:

module M =
    type DU = A | B | C

    let someOtherFunction x = x + 1

// Open only the type inside the module
open type M.DU

printfn "%A" A

Yalnızca tanımlayıcı ile global kök yoldan aç

gibi iç içe yerleştirilmiş modüller

module A =
    module B =
        ...

üzerinden açılabilir

open A // opens A
open B // opens A.B

Yalnızca tam modülleri veya ad alanlarını açmak için bunlara tanımlayıcı ön ekini ekleyinglobal:

open global.A   // works
open global.B   // this now fails
open global.A.B // works

Varsayılan Olarak Açık Olan Ad Alanları

Bazı ad alanları F# kodunda o kadar sık kullanılır ki, açık içeri aktarma bildirimine gerek kalmadan örtük olarak açılırlar. Aşağıdaki tabloda varsayılan olarak açık olan ad alanları gösterilmektedir.

Ad Alanı Açıklama
FSharp.Core ve floatgibi int yerleşik türler için temel F# tür tanımlarını içerir.
FSharp.Core.Operators ve *gibi + temel aritmetik işlemleri içerir.
FSharp.Collections ve Arraygibi List sabit koleksiyon sınıflarını içerir.
FSharp.Control Gecikmeli değerlendirme ve zaman uyumsuz ifadeler gibi denetim yapıları için türler içerir.
FSharp.Text İşlev gibi printf biçimlendirilmiş GÇ işlevlerini içerir.

Otomatik Açılma Özniteliği

Derlemeye AutoOpen başvurulduğunda bir ad alanını veya modülü otomatik olarak açmak istiyorsanız özniteliğini bir derlemeye uygulayabilirsiniz. Üst modül veya ad alanı açıldığında bu modülü otomatik olarak açmak için bir modüle özniteliğini de uygulayabilirsiniz AutoOpen . Daha fazla bilgi için bkz . AutoOpenAttribute.

RequireQualifiedAccess Özniteliği

Bazı modüller, kayıtlar veya birleşim türleri özniteliğini RequireQualifiedAccess belirtebilir. Bu modüllerin, kayıtların veya birleşimlerin öğelerine başvurduğunda, içeri aktarma bildirimi dahil edip etmediğinize bakılmaksızın nitelenmiş bir ad kullanmanız gerekir. Bu özniteliği yaygın olarak kullanılan adları tanımlayan türlerde stratejik olarak kullanırsanız, ad çakışmalarını önlemeye yardımcı olur ve böylece kodu kitaplıklardaki değişikliklere karşı daha dayanıklı hale getirirsiniz. Daha fazla bilgi için bkz . RequireQualifiedAccessAttribute.

Ayrıca bkz.