Aracılığıyla paylaş


Erişim denetimi (F#)

Erişim denetimi türleri, yöntemleri ve işlevler gibi bazı program öğeleri hangi istemcilerin kullanabileceği bildirmek için başvurur.

Erişim denetimi temelleri

F# erişim denetimi belirticileri public, internal, ve private modüller, türleri, yöntemleri, değer tanımları, İşlevler, özellikler ve açık alanları uygulanabilir.

  • publicvarlığın tüm arayanlar tarafından erişilebilir gösterir.

  • internalvarlık yalnızca aynı derlemesinden erişilebilir gösterir.

  • privatevarlık yalnızca kapsayan tür veya modülü erişilebilir gösterir.

Not

Erişim belirticisi protected destekleyen dillerde yazılmış türleri kullanıyorsanız, kabul edilebilir olmasına rağmen F# kullanılmayan protected erişim.Bu nedenle, korumalı bir yöntemi geçersiz kılmak, yönteminizi yalnızca sınıf ve onun bağımlısı erişilebilir kalır.

Genel olarak, belirleyici ne zaman dışında varlığın adı önüne konur bir mutable veya inline belirleyici kullanılır, sonra erişim denetimi belirticisi görünme.

Hiçbir erişim belirticisi kullanılırsa, varsayılan değer olan public, dışında let her zaman olan bir tür bağlarında private türü.

İmzalar F# F# program öğelerine erişimi denetlemek için başka bir mekanizma sağlar. İmzalar, erişim denetimi için gerekli değildir. Daha fazla bilgi için bkz. İmzalar (F#).

Erişim denetimi için kuralları

Erişim denetimi aşağıdaki kuralları şöyledir:

  • Devralma bildirimlerinde (yani kullanımını inherit bir sınıf için temel sınıf belirtmek için) arabirim (diğer bir deyişle sınıfın bir arabirimi uygulayan belirten) bildirimleri ve soyut üyeleri her zaman aynı erişilebilirlik kapsayan türü sahip. Bu nedenle, bir erişim denetimi belirticisi bu yapıları üzerinde kullanılamaz.

  • Taleplerini discriminated Birliği'ndeki sendika türünden ayrı kendi erişim denetimi değiştirici olamaz.

  • Tek tek kayıt türü alanlarının kayıt türü ' ayrı kendi erişim denetimi değiştirici olamaz.

Örnek

Aşağıdaki kod, erişim denetimi belirticileri kullanımını göstermektedir. Projede iki dosyalar var. Module1.fs ve Module2.fs. Her dosya örtülü bir modüldür. Bu nedenle, iki modül vardır Module1 ve Module2. Özel bir türü ve bir iç türü tanımlanan Module1. Özel Türü alanından erişilemiyor Module2, ancak iç türü.

// Module1.fs

module Module1

// This type is not usable outside of this file
type private MyPrivateType() =
   // x is private since this is an internal let binding
   let x = 5
   // X is private and does not appear in the QuickInfo window
   // when viewing this type in the Visual Studio editor
   member private this.X() = 10
   member this.Z() = x * 100

type internal MyInternalType() =
   let x = 5
   member private this.X() = 10
   member this.Z() = x * 100

// Top-level let bindings are public by default,
// so "private" and "internal" are needed here since a
// value cannot be more accessible than its type.
let private myPrivateObj = new MyPrivateType()
let internal myInternalObj = new MyInternalType()

// let bindings at the top level are public by default,
// so result1 and result2 are public.
let result1 = myPrivateObj.Z
let result2 = myInternalObj.Z

Aşağıdaki kodda oluşturulan türlerdeki erişilebilirlik sınar Module1.fs.

// Module2.fs
module Module2

open Module1

// The following line is an error because private means
// that it cannot be accessed from another file or module
// let private myPrivateObj = new MyPrivateType()
let internal myInternalObj = new MyInternalType()

let result = myInternalObj.Z

Ayrıca bkz.

Diğer Kaynaklar

F# dil başvurusu

İmzalar (F#)