İmzalar

İmza dosyası, türler, ad alanları ve modüller gibi bir dizi F# program öğesinin 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ı ada sahip ancak .fs yerine .fsi uzantısına sahip bir imza dosyanız olabilir. Komut satırını 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. 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, ilgili uygulama dosyasındaki kodun hangi bölümlerine uygulama dosyasının dışındaki koddan erişilebileceğini ve uygulama dosyasının içindeki bölümleri belirtmek için kullanırsını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 olmalıdır. Bu konunun ilerleyen bölümlerinde belirtilen bazı özel durumlar dışında, imza dosyasında listelenmeyen dil öğeleri uygulama dosyasına özel olarak kabul edilir. Proje veya komut satırında imza dosyası bulunmazsa, varsayılan erişilebilirlik kullanılır.

Varsayılan erişilebilirlik hakkında daha fazla bilgi için bkz . Erişim Denetimi.

İmza dosyasında, türlerin tanımını ve her bir yöntem veya işlevin uygulamalarını yinelemezsiniz. Bunun yerine, bir modül veya ad alanı parçası tarafından uygulanan işlevselliğin tam belirtimi işlevi gören her yöntem ve işlev için imzayı kullanırsınız. Tür imzası söz dizimi, arabirimlerde ve soyut sınıflarda soyut yöntem bildirimlerinde kullanılanla aynıdır ve doğru derlenmiş giriş görüntülendiğinde IntelliSense ve F# yorumlayıcı fsi.exe tarafından da gösterilir.

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

Öznitelik Açıklama
[<Sealed>] Soyut üyesi olmayan veya genişletilmemesi gereken bir tür için.
[<Interface>] Arabirim olan bir tür için.

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

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

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

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

  • Uygulama dosyasındaki tür kısaltmaları, imza dosyasında kısaltması olmayan bir türle eşleşmemelidir.

  • Kayıtların ve ayrımcı birleşimlerin alanlarının ve oluşturucularının tümünü veya hiçbirini kullanıma sunmaları ve imzadaki sıranın uygulama dosyasındaki sırayla eşleşmesi gerekir. Sınıflar, imzadaki alanlarının ve yöntemlerinin bazılarını, tümünü veya hiçbirini gösteremez.

  • Oluşturucuları olan sınıflar ve yapılar, temel sınıflarının bildirimlerini ( inherits bildirimi) kullanıma sunmalıdır. Ayrıca, oluşturucuları olan sınıfların ve yapıların tüm soyut yöntemlerini ve arabirim bildirimlerini kullanıma sunmaları gerekir.

  • Arabirim türleri tüm yöntemlerini ve arabirimlerini ortaya çıkarmalıdır.

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

  • Erişilebilirlik değiştiricileri (public, internalvb.) ve inline imzadaki ve mutable değiştiricileri uygulamadakilerle eşleşmelidir.

  • Genel tür parametrelerinin sayısı (örtük olarak çıkarılmış veya açıkça bildirilmiş) eşleşmelidir ve genel tür parametrelerindeki tür ve tür kısıtlamaları eşleşmelidir.

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

  • İmzaların ve uygulamaların parametre deseni (arity olarak da bilinir) tutarlı olmalıdır.

  • bir imza dosyasındaki parametre adları ilgili uygulama dosyasından farklıysa, bunun yerine imza dosyasındaki ad kullanılır ve bu da hata ayıklama veya profil oluşturma sırasında sorunlara neden olabilir. Bu tür uyuşmazlıklardan haberdar olmak istiyorsanız, proje dosyanızda veya derleyiciyi çağırırken 3218 uyarısını etkinleştirin (Bkz--warnon. Derleyici Seçenekleri'nin altında).

Aşağıdaki kod örneği, ad alanı, modül, işlev değeri ve uygun özniteliklerle birlikte tür imzalarına sahip bir imza dosyasının ö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.