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.
File tanda tangan berisi informasi tentang tanda tangan publik dari sekumpulan elemen program F#, seperti jenis, namespace layanan, dan modul. Ini dapat digunakan untuk menentukan aksesibilitas elemen program ini.
Komentar
Untuk setiap file kode F#, Anda dapat memiliki file tanda tangan, yang merupakan file yang memiliki nama yang sama dengan file kode tetapi dengan ekstensi .fsi alih-alih .fs. File tanda tangan juga dapat ditambahkan ke baris perintah kompilasi jika Anda menggunakan baris perintah secara langsung. Untuk membedakan antara file kode dan file tanda tangan, file kode terkadang disebut sebagai file implementasi. Dalam proyek, file tanda tangan harus mendahului file kode terkait.
File tanda tangan menjelaskan namespace, modul, jenis, dan anggota dalam file implementasi yang sesuai. Anda menggunakan informasi dalam file tanda tangan untuk menentukan bagian kode apa dalam file implementasi yang sesuai dapat diakses dari kode di luar file implementasi, dan bagian apa yang internal untuk file implementasi. Namespace, modul, dan jenis yang disertakan dalam file tanda tangan harus merupakan subset namespace, modul, dan jenis yang disertakan dalam file implementasi. Dengan beberapa pengecualian yang dicatat nanti dalam topik ini, elemen bahasa yang tidak tercantum dalam file tanda tangan dianggap privat ke file implementasi. Jika tidak ada file tanda tangan yang ditemukan di proyek atau baris perintah, aksesibilitas default akan digunakan.
Untuk informasi selengkapnya tentang aksesibilitas default, lihat Kontrol Akses.
Dalam file tanda tangan, Anda tidak mengulangi definisi jenis dan implementasi setiap metode atau fungsi. Sebagai gantinya, Anda menggunakan tanda tangan untuk setiap metode dan fungsi, yang bertindak sebagai spesifikasi lengkap fungsionalitas yang diimplementasikan oleh modul atau fragmen namespace. Sintaks untuk tanda tangan jenis sama dengan yang digunakan dalam deklarasi metode abstrak dalam antarmuka dan kelas abstrak, dan juga ditunjukkan oleh IntelliSense dan oleh penerjemah F# fsi.exe ketika menampilkan input yang dikompilasi dengan benar.
Jika tidak ada cukup informasi dalam tanda tangan jenis untuk menunjukkan apakah jenis disegel, atau apakah itu jenis antarmuka, Anda harus menambahkan atribut yang menunjukkan sifat jenis ke pengkompilasi. Atribut yang Anda gunakan untuk tujuan ini dijelaskan dalam tabel berikut.
| Karakteristik | Deskripsi |
|---|---|
[<Sealed>] |
Untuk jenis yang tidak memiliki anggota abstrak, atau yang tidak boleh diperpanjang. |
[<Interface>] |
Untuk jenis yang merupakan antarmuka. |
Pengkompilasi menghasilkan kesalahan jika atribut tidak konsisten antara tanda tangan dan deklarasi dalam file implementasi.
Gunakan kata kunci val untuk membuat tanda tangan untuk nilai atau nilai fungsi. Kata kunci type memperkenalkan tanda tangan jenis.
Anda dapat membuat file tanda tangan dengan menggunakan --sig opsi pengkompilasi. Umumnya, Anda tidak menulis file .fsi secara manual. Sebagai gantinya, Anda membuat file .fsi dengan menggunakan pengkompilasi, menambahkannya ke proyek Anda, jika Anda memilikinya, dan mengeditnya dengan menghapus metode dan fungsi yang tidak ingin Anda akses.
Ada beberapa aturan untuk tanda tangan jenis:
Ketik singkatan dalam file implementasi tidak boleh cocok dengan jenis tanpa singkatan dalam file tanda tangan.
Rekaman dan serikat pekerja yang didiskriminasi harus mengekspos semua atau tidak ada bidang dan konstruktornya, dan urutan dalam tanda tangan harus sesuai dengan urutan dalam file implementasi. Kelas dapat mengungkapkan beberapa, semua, atau tidak ada bidang dan metodenya dalam tanda tangan.
Kelas dan struktur yang memiliki konstruktor harus mengekspos deklarasi kelas dasar mereka (
inheritsdeklarasi). Selain itu, kelas dan struktur yang memiliki konstruktor harus mengekspos semua metode abstrak dan deklarasi antarmuka mereka.Jenis antarmuka harus mengungkapkan semua metode dan antarmukanya.
Aturan untuk tanda tangan nilai adalah sebagai berikut:
Pengubah untuk aksesibilitas (
public,internal, dan sebagainya) daninlinepengubah danmutabledalam tanda tangan harus cocok dengan yang ada dalam implementasi.Jumlah parameter jenis generik (baik yang disimpulkan secara implisit atau dinyatakan secara eksplisit) harus cocok, dan batasan jenis dan jenis dalam parameter jenis generik harus cocok.
LiteralJika atribut digunakan, atribut harus muncul dalam tanda tangan dan implementasi, dan nilai harfiah yang sama harus digunakan untuk keduanya.Pola parameter (juga dikenal sebagai aritas) tanda tangan dan implementasi harus konsisten.
Jika nama parameter dalam file tanda tangan berbeda dari file implementasi yang sesuai, nama dalam file tanda tangan akan digunakan sebagai gantinya, yang dapat menyebabkan masalah saat penelusuran kesalahan atau pembuatan profil. Jika Anda ingin diberi tahu tentang ketidakcocokan tersebut, aktifkan peringatan 3218 dalam file proyek Anda atau saat memanggil pengkompilasi (lihat
--warnondi bawah Opsi Pengkompilasi).
Contoh kode berikut menunjukkan contoh file tanda tangan yang memiliki namespace, modul, nilai fungsi, dan jenis tanda tangan bersama dengan atribut yang sesuai. Ini juga menunjukkan file implementasi yang sesuai.
// Module1.fsi
namespace Library1
module Module1 =
val function1 : int -> int
type Type1 =
new : unit -> Type1
member method1 : unit -> unit
member method2 : unit -> unit
[<Sealed>]
type Type2 =
new : unit -> Type2
member method1 : unit -> unit
member method2 : unit -> unit
[<Interface>]
type InterfaceType1 =
abstract member method1 : int -> int
abstract member method2 : string -> unit
Kode berikut menunjukkan file implementasi.
namespace Library1
module Module1 =
let function1 x = x + 1
type Type1() =
member type1.method1() =
printfn "type1.method1"
member type1.method2() =
printfn "type1.method2"
[<Sealed>]
type Type2() =
member type2.method1() =
printfn "type2.method1"
member type2.method2() =
printfn "type2.method2"
[<Interface>]
type InterfaceType1 =
abstract member method1 : int -> int
abstract member method2 : string -> unit
Lihat juga
- F# Referensi Bahasa
- Kontrol Akses
- Opsi Pengkompilasi