İçeri aktarma bildirimleri: anahtar open sözcüğü

İçeri aktarma bildirimi, öğelerine tam ad olmadan başvurabilirsiniz bir modülü veya ad alanını belirtir.

Syntax

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

Açıklamalar

Her zaman tam ad alanını veya modül yolunu kullanarak koda başvurmak, yazması, okuması ve bakımını yapmak zor olan kodlar oluşturabilir. Bunun yerine, sık kullanılan modüller ve ad alanları için anahtar sözcüğünü kullanabilirsiniz; böylece bu modülün veya ad alanının bir üyesine başvurarak tam ad yerine adın kısa formunu open kullanabilirsiniz. Bu anahtar sözcük, C# içinde, Visual C++ ve using using namespace Imports Visual Basic.

Sağlanan modül veya ad alanı aynı projede veya başvurulan bir proje ya da derlemede yer ataylanmalıdır. Yoksa projeye bir başvuru ekleyebilir veya komut satırı seçeneğini (veya kısaltmasını) -reference -r kullanabilirsiniz. Daha fazla bilgi için bkz. Derleyici Seçenekleri.

İçeri aktarma bildirimi, adları, kapsayan ad alanının, modülün veya dosyanın sonuna kadar bildirimi izleyen kodda kullanılabilir yapar.

Birden çok içeri aktarma bildirimini kullanırken, bunlar ayrı satırlarda görün seçmelidir.

Aşağıdaki kod, kodu basitleştirmek için open anahtar sözcüğünün 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, aynı ad birden fazla açık modül veya ad alanı olduğ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, empty hem hem de Seq.empty modüllerde yer alıyor olsa bile empty anlamına List Seq gelir.

open List
open Seq
printfn %"{empty}"

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

Tür bildirimlerini açma

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

open type System.Math
PI

Bu, türün tüm erişilebilir statik alanlarını ve üyelerini ortaya çıkarır.

Statik üyeleri ortaya open çıkarmak için F# tanımlı kayıt ve ayrımlı union türlerini de kullanabilirsiniz. Ayrımlı union'lar durumunda, birliktelik durumlarını da ortaya çıkartır. Bu, bir modülün içinde bildirilen ve açmak istemeyilen bir tür içindeki union durumlara 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

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ülü olarak açılırlar. Aşağıdaki tablo varsayılan olarak açık olan ad alanlarını gösterir.

Ad Alanı Description
FSharp.Core ve gibi yerleşik türler için temel F# tür tanımları int float içerir.
FSharp.Core.Operators ve gibi temel aritmetik işlemleri + * içerir.
FSharp.Collections ve gibi sabit koleksiyon sınıfları List Array içerir.
FSharp.Control Yavaş değerlendirme ve zaman uyumsuz ifadeler gibi denetim yapıları için türleri içerir.
FSharp.Text Biçimlendirilmiş IO için işlev gibi işlevler printf içerir.

AutoOpen Özniteliği

Derlemeye AutoOpen başvurularak bir ad alanını veya modülü otomatik olarak açmak için özniteliğini bir derlemeye uygulayabilirsiniz. Ayrıca, üst modül AutoOpen veya ad alanı açıldığında bu modülü otomatik olarak açmak için özniteliğini modüle uygulayabilirsiniz. Daha fazla bilgi için bkz. AutoOpenAttribute.

RequireQualifiedAccess Özniteliği

Bazı modüller, kayıtlar veya union türleri özniteliğini RequireQualifiedAccess belirt olabilir. Bu modüllerin, kayıtların veya birliğin öğelerine başvururken, içeri aktarma bildirimi ekli olup olmadığınız ne olursa olsun tam bir ad kullan 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 kod kitaplıklarda yapılan değişikliklere daha fazla karşı daha fazla karşınıza olur. Daha fazla bilgi için bkz. RequireQualifiedAccessAttribute.

Ayrıca bkz.