Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Kontrol akses mengacu pada mendeklarasikan klien mana yang dapat menggunakan elemen program tertentu, seperti jenis, metode, dan fungsi.
Dasar-dasar Kontrol Akses
Di F#, penentu publickontrol akses , , internaldan private dapat diterapkan ke modul, jenis, metode, definisi nilai, fungsi, properti, dan bidang eksplisit.
publicmenunjukkan bahwa entitas dapat diakses oleh semua penelepon.internalmenunjukkan bahwa entitas hanya dapat diakses dari rakitan yang sama.privatemenunjukkan bahwa entitas hanya dapat diakses dari jenis atau modul penutup.
Nota
Penentu protected akses tidak digunakan dalam F#, meskipun dapat diterima jika Anda menggunakan jenis yang ditulis dalam bahasa yang mendukung protected akses. Oleh karena itu, jika Anda mengambil alih metode yang dilindungi, metode Anda tetap dapat diakses hanya dalam kelas dan keturunannya.
Penentu akses diletakkan di depan nama entitas.
Jika tidak ada penentu akses yang digunakan, defaultnya adalah public, kecuali untuk let pengikatan dalam jenis, yang selalu private ke jenis .
Tanda tangan di F# menyediakan mekanisme lain untuk mengontrol akses ke elemen program F#. Tanda tangan tidak diperlukan untuk kontrol akses. Untuk informasi selengkapnya, lihat Tanda Tangan.
Aturan untuk Kontrol Akses
Kontrol akses tunduk pada aturan berikut:
Deklarasi warisan (yaitu, penggunaan
inherituntuk menentukan kelas dasar untuk kelas), deklarasi antarmuka (yaitu, menentukan bahwa kelas mengimplementasikan antarmuka), dan anggota abstrak selalu memiliki aksesibilitas yang sama dengan jenis penutup. Oleh karena itu, penentu kontrol akses tidak dapat digunakan pada konstruksi ini.Aksesibilitas untuk kasus individu dalam serikat yang diskriminasi ditentukan oleh aksesibilitas serikat yang didiskriminasi itu sendiri. Artinya, kasus serikat tertentu tidak kurang dapat diakses daripada serikat itu sendiri.
Aksesibilitas untuk bidang individual dari jenis rekaman ditentukan oleh aksesibilitas rekaman itu sendiri. Artinya, label rekaman tertentu tidak kurang dapat diakses daripada rekaman itu sendiri.
Contoh
Kode berikut mengilustrasikan penggunaan penentu kontrol akses. Ada dua file dalam proyek, Module1.fs dan Module2.fs. Setiap file secara implisit adalah modul. Oleh karena itu, ada dua modul, Module1 dan Module2. Jenis privat dan jenis internal didefinisikan dalam Module1. Jenis privat tidak dapat diakses dari Module2, tetapi jenis internal dapat.
// 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
Kode berikut menguji aksesibilitas jenis yang dibuat di 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
Lihat juga
- F# Referensi Bahasa
- Tanda Tangan