İç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 float gibi 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 Array gibi 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.