التواقيع (F#)

A توقيع ملف يحتوي على معلومات حول the public signatures of a التعيين of F# برنامج عناصر, such كـ أنواع, مساحات الاسم, و الوحدات النمطية. It can be used إلى specify the إمكانية وصول ذوي الاحتياجات الخاصة of these برنامج عناصر.

ملاحظات

لكل ب # ‏‏رمز الملف، يمكنك الحصول على ملف توقيع ، الذي هو ملف له نفس الاسم مثل ال‏‏رمز الملف باستخدام.fsi ملحق بدلاً من.fs. توقيع يمكن أيضا تمت الإضافة ملفات إلى الترجمة سطر الأوامر عند استخدام سطر الأوامر مباشرة. إلى التمييز بين ملفات تعليمات برمجية وملفات التوقيعات، وملفات تعليمات برمجية يشار إليها أحياناً إلى ك ملفات التنفيذ . في مشروع، الملف التوقيع يجب أن تسبق المقترنة تعليمات برمجية الملف.

يصف ملف توقيع لمساحات أسماء الوحدات النمطية أنواع، وأعضاء في ملف التطبيق المناسب. استخدم المعلومات الموجودة في ملف توقيع إلى تحديد ما أجزاء تعليمات برمجية في التطبيق المناسب يمكن الوصول إلى الملف من تعليمات برمجية خارج الملف التنفيذ، وما هي الأجزاء الداخلية إلى الملف التنفيذ. مساحات الأسماء، الوحدات النمطية، و أنواع التي تم تضمينها في توقيع يجب أن يكون الملف مجموعة فرعية من مساحات الأسماء، والوحدات النمطية، و أنواع التي يتم تضمينها في ملف التطبيق. مع بعض الاستثناءات المذكورة لاحقاً في هذا الموضوع، هذه اللغة تعتبر العناصر التي لم يتم سردها في ملف توقيع الخاص إلى ملف التطبيق. في حالة عدم وجود ملف التوقيع هو في مشروع أو سطر الأوامر، والتشغيل الافتراضي هو المستخدمة.

لمزيد من المعلومات حول إمكانية وصول ذوي الاحتياجات الخاصة شكل افتراضي، راجع التحكم بالوصول (F#).

في ملف توقيع، لا يكرر التعريف أنواع وتطبيقات كل أسلوب أو دالة. بدلاً من ذلك، يمكنك استخدام توقيع لكل أسلوب ودالة، والذي يعمل كمواصفات كاملة للوظائف التي هو تطبيقها من قبل جزء وحدة نمطية أو مساحة الاسم. بناء الجملة لتوقيع نوع هو نفسه كـ التي تستخدم في أسلوب مجرد تصريحات في الواجهات و clكـses مجردة، وأيضا يظهر بواسطة التحسس الذكي و fsi.exe مترجم ب # عند عرض إدخال المترجمة بشكل صحيح.

إذا كان هناك هو المعلومات غير كافية في توقيع نوع للإشارة إلى ما إذا كان نوع هو مغلقة، أو ما إذا كان ذلك هو نوع واجهة، يجب عليك إضافة سمة يشير إلى طبيعة النوع للمحول البرمجي. السمات التي تستخدمها لهذا الغرض موصوفة في الجدول التالي.

السمة

الوصف

[<Sealed>]

نوع التي ليس لديها الأعضاء مجردة أو التي يجب عدم إلحاق.

[<Interface>]

نوع هو واجهة.

المحول البرمجي بإنشاء خطأ إذا كانت السمات غير متسقة بين توقيع و إعلان في ملف التطبيق.

استخدم الكلمة الأساسية valإلى إنشاء توقيع لالقيمة أو دالة القيمة. الكلمة الأساسية typeيقدم توقيع نوع.

يمكنك توليد ملف توقيع باستخدام --sigخيار المترجم. بشكل عام، يمكنك عدم كتابة ملفات.fsi يدوياً. بدلاً من ذلك، يمكنك توليد ملفات.fsi باستخدام المحول البرمجي، قم بإضافتها إلى مشروع الخاص بك، إذا كان لديك واحدة، و تحريرها بواسطة إزالة أساليب و الوظائف التي لا تريد أن تكون قابلة للوصول.

هناك العديد من القواعد ل نوع التواقيع:

  • يجب أن نوع اختصارات في ملف تطبيق غير مطابقة نوعا دون اختصار في ملف توقيع.

  • يجب أن تعرض أما الجميع السجلات واتحادات discriminated أو بلا حقول الخاصة بها المنشئات، ويجب أن يطابق الترتيب في توقيع الترتيب في ملف التطبيق. يمكن لفئات الكشف عن بعض أو الجميع أو أي من حقول الخاصة بها و وظائف في توقيع.

  • فئات و يجب أن تعرض بني التي تحتوي المنشئات تصريحات للفئات الأساسية الخاصة بهم ( inheritsتصريح). وكذلك فئات و بني التي تحتوي المنشئات يجب أن تعرض الجميع أساليبها قيمة مجردة و تعريفات الواجهة.

  • يجب أن يكشف عن أنواع الواجهات الجميع الأساليب و الواجهات.

القواعد للتواقيع القيمة كـ التالي:

  • معدلات من أجل إمكانية وصول ذوي الاحتياجات الخاصة ( public، internal، وهكذا) و inlineو mutableمعدلات في توقيع يجب أن مطابقة في التنفيذ.

  • يجب أن يطابق عدد المعلمات النوع العام (سواء ضمنياً الاستدلال أو التصريح بشكل صريح)، و الأنواع و يجب أن تتطابق مع نوع القيود في معلمات نوع عام.

  • إذا Literalاستخدام السمة، فيجب أن يظهر في كل من توقيع و التنفيذ، و يجب أن يستخدم نفس القيمة قيمة حرفية لكل منهما.

  • نقش للمعلمات (يعرف أيضا عدد الوسيطات ) التواقيع و يجب أن تكون تطبيقات متوافقة.

يلي تعليمات برمجية المثال يظهر مثال عن ملف توقيع الذي يحتوي على مساحة الاسم وحدة نمطية?، القيمة دالة ونوع التواقيع مع السمات المناسبة. ويظهر أيضا ملف تطبيق المطابق.

// Module1.fsi -- signature file

module Library1
  module Module1 = 
    val function1 : int -> int
  
    type Type1 =
       member method1 : unit -> unit
       member method2 : unit -> unit
   
    [<Sealed>]
    type Type2 =
       member method1 : unit -> unit
       member method2 : unit -> unit
   
    [<Interface>]
    type InterfaceType1 =
      abstract member method1 : int -> int
      abstract member method2 : string -> unit

يظهر التعليمة البرمجية التالية في ملف التطبيق.

// Module1.fs -- implementation file
namespace Library1

module Module1
   
    let function1 x = x + 1
 
    type Type1() =
      member type1.method1() =
         printfn "test1.method1"
      member type1.method2() =
         printfn "test1.method2"
         
         
    [<Sealed>]
    type Type2() =
      member type2.method1() =
         printfn "test1.method1"
      member type1.method2() =
         printfn "test1.method2"
           
     [<Interface>]
     type InterfaceType1 =
        abstract member method1 : int -> int
        abstract member method2 : string -> unit

راجع أيضًا:

المبادئ

التحكم بالوصول (F#)

موارد أخرى

مرجع لغة ب #

خيارات برنامج التحويل البرمجي (F #)