İmzalar

İmza dosyası, türler, ad alanları ve modüller gibi F# program öğeleri kümesi ortak imzaları hakkında bilgi içerir. Bu program öğelerinin erişilebilirliğini belirtmek için kullanılabilir.

Açıklamalar

Her F# kod dosyası için, kod dosyasıyla aynı adı ve ancak .fs yerine .fsi uzantısına sahip bir dosya olan bir imza dosyanız olabilir. Komut satırı doğrudan kullanıyorsanız imza dosyaları derleme komut satırına da eklenebilir. Kod dosyaları ve imza dosyaları arasında ayrım yapmak için, kod dosyaları bazen uygulama dosyaları olarak adlandırılır. Bir projede, imza dosyasının ilişkili kod dosyasından önce olması gerekir.

İmza dosyası, ilgili uygulama dosyasındaki ad alanlarını, modülleri, türleri ve üyeleri açıklar. Bir imza dosyasındaki bilgileri, karşılık gelen uygulama dosyasındaki kodun hangi bölümlerine uygulama dosyasının dışındaki koddan erişil dahili olduğunu belirtmek için kullanırsanız. İmza dosyasına dahil edilen ad alanları, modüller ve türler, uygulama dosyasına dahil edilen ad alanlarının, modüllerin ve türlerin bir alt kümesi olması gerekir. Bu konu başlığında daha sonra belirtilen bazı özel durumlar dışında, imza dosyasında listelenmiyor olan dil öğeleri, uygulama dosyasına özel olarak kabul edilir. Proje veya komut satırı içinde imza dosyası bulunamasa varsayılan erişilebilirlik kullanılır.

Varsayılan erişilebilirlik hakkında daha fazla bilgi için bkz. Access Control.

bir imza dosyasında türlerin tanımını ve her bir yöntemin veya işlevin uygulamalarının tekrarlamaz. Bunun yerine, bir modül veya ad alanı parçası tarafından uygulanan işlevselliğin tam belirtimi olarak görev alan her yöntem ve işlev için imzayı kullanırsınız. Bir tür imzasının söz dizimi, arabirimlerde ve soyut sınıflarda soyut yöntem bildirimlerini kullanılanla aynıdır ve doğru derlenmiş girişi görüntülediği zaman IntelliSense ve F# yorumlayıcı fsi.exe tarafından da gösterilir.

Tür imzalarında bir türün korumalı olup olmadığını veya bir arabirim türü olup olmadığını belirtmek için yeterli bilgi yoksa, türün doğasını derleyiciye belirten bir öznitelik eklemeniz gerekir. Bu amaçla kullanabileceğiniz öznitelikler aşağıdaki tabloda açıklanmıştır.

Öznitelik Açıklama
[<Sealed>] Soyut üyeye sahip bir tür için veya genişletilamamalıdır.
[<Interface>] Arabirim olan bir tür için.

Öznitelikler, uygulama dosyasındaki imza ve bildirim arasında tutarlı değilse derleyici bir hata üretir.

Bir değer veya val işlev değeri için imza oluşturmak üzere anahtar sözcüğünü kullanın. anahtar sözcüğü type bir tür imzası sağlar.

Derleyici seçeneğini kullanarak bir imza --sig dosyası oluşturabilirsiniz. Genellikle , .fsi dosyalarını el ile yazmazsınız. Bunun yerine, derleyiciyi kullanarak .fsi dosyaları üretir, varsa projenize ekler ve erişilebilir olmasını istemeyebilirsiniz yöntemleri ve işlevleri kaldırarak bunları düzenlersiniz.

Tür imzaları için çeşitli kurallar vardır:

  • Uygulama dosyasındaki tür kısaltmaları, imza dosyasında kısaltma olmadan bir türle eşleşmez.

  • Kayıtlar ve ayrımlı union'lar alanlarının ve oluşturucularının hepsini veya hiçbirini açığa çıkarmamalıdır ve imza düzeni uygulama dosyasındaki sıralamayla eşleşmeli. Sınıflar, imzada alanlarının ve yöntemlerinin bazılarının veya hiçbirinin ortaya çıkarılamayabilirsiniz.

  • Oluşturucuları olan sınıflar ve yapılar, temel sınıflarının bildirimlerini (bildirim) ortaya inherits çıkarmalıdır. Ayrıca, oluşturucuları olan sınıflar ve yapılar tüm soyut yöntemlerini ve arabirim bildirimlerini ortaya çıkarmalıdır.

  • Arabirim türleri, tüm yöntemlerini ve arabirimlerini ortaya koyarak ortaya çıkar.

Değer imzaları için kurallar aşağıdaki gibidir:

  • Erişilebilirlik ( , ve gibi) için değiştiriciler ve imzada ve public internal inline değiştiricileri, mutable uygulamanın içinde yer alan değiştiricilerle eşleşmeli.

  • Genel tür parametrelerinin (örtülü olarak ortaya konan veya açıkça bildirilen) sayısı eşleşmeli ve genel tür parametrelerinde türler ve tür kısıtlamaları eşleşmeli.

  • Öznitelik kullanılıyorsa, hem imzada hem de uygulamada görünse ve her ikisi Literal için de aynı değişmez değer kullanılmalıdır.

  • İmza ve uygulama parametrelerinin deseni (aynı zamanda arity olarak da bilinir) tutarlı olmalıdır.

  • Bir imza dosyasındaki parametre adları karşılık gelen uygulama dosyasından farklı ise, bunun yerine imza dosyasındaki ad kullanılır ve bu da hata ayıklama veya profil oluşturma sırasında soruna neden olabilir. Bu tür aksılar hakkında bilgi için proje dosyanız veya derleyiciyi etkinleştirirken (bkz. Derleyici Seçenekleri altında) uyarı 3218'i --warnon etkinleştirin.

Aşağıdaki kod örneği, uygun özniteliklerle birlikte ad alanı, modül, işlev değeri ve tür imzaları olan bir imza dosyası örneğini gösterir. Ayrıca ilgili uygulama dosyasını da gösterir.

// 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

Aşağıdaki kod, uygulama dosyasını gösterir.

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

Ayrıca bkz.