ملحقات من النوع (F#)

ملحقات أنواع تتيح لك إضافة الأعضاء جدد إلى نوع كائن معرفة مسبقاً.

// Intrinsic extension.
type typename with
   member self-identifier.member-name =
      body
   ...
   [ end ]

// Optional extension.
type typename with
   member self-identifier.member-name =
      body
   ...
   [ end ]

ملاحظات

يوجد نموذجان لملحقات نوع التي تحتوي على بناء جملة مختلف قليلاً من و السلوك. ملحق المضمنة هو ملحق الذي يظهر في نفس مساحة الاسم أو وحدة نمطية في نفس الملف المصدر وفي نفس كـ sembly (مكتبة الارتباط الديناميكي أو ملف قابل للتنفيذ) كـ نوع التي يتم توسيعها. ملحق اختياري هو ملحق الذي يظهر خارج وحدة نمطية? الأصلي أو مساحة الاسم أو تجميع نوع التي يتم توسيعها. تظهر الملحقات المضمنة في النوع عندما النوع هو اختبار بواسطة الانعكاس، ولكن لا الملحقات الاختيارية. يجب أن تكون ملحقات اختيارية في الوحدات النمطية وكان في نطاق فقط عند وحدة نمطية? التي تحتوي على الملحق هو فتح.

في بناء الجملة السابق، typenameيمثل النوع التي هو التي يتم توسيعها. يمكن توسيع أي نوع التي يمكن الوصول إليها، ولكن يجب أن يكون اسم النوع على اسم نوع فعلى وليس اختصار من نوع. يمكنك تحديد عدة الأعضاء في ملحق نوع واحد. self-identifierيمثل مثيل الكائن الذي يتم استدعاؤه، فقط كـ في الأعضاء العادية.

endالكلمة الأساسية هو اختيارية في بناء جملة خفيفة.

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

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

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

في المثال التالي، نوعا في الوحدة نمطية يحتوي على ملحق نوع مضمن. إلى يظهر رمز العميل خارج وحدة نمطية?، ملحق نوع كعضو عادي من النوع في الجميع نواحي.

module MyModule1 =

    // Define a type.
    type MyClass() =
      member this.F() = 100

    // Define type extension.
    type MyClass with
       member this.G() = 200

module MyModule2 =
   let function1 (obj1: MyModule1.MyClass) =
      // Call an ordinary method.
      printfn "%d" (obj1.F())
      // Call the extension method.
      printfn "%d" (obj1.G())

يمكنك استخدام ملحقات نوع مضمن للتعريف من نوع في مقاطع منفصلة. This can be useful في managing قطر أيمن متوسط نوع ملفات تعريف, for مثال, إلى احتفظ compiler-generated تعليمات برمجية و authored تعليمات برمجية separate أو إلى مجموعة together تعليمات برمجية تاريخ الإنشاء بواسطة different people أو associated مع different functionality.

في the following مثال, an اختياري نوع ملحق extends the System.Int32 نوع مع an أسلوب التوسيع FromString that calls the ثابت عضو Parse. The testFromString أسلوب demonstrates that the جديد عضو هو called just مثل أي مثيل عضو.

// Define a new member method FromString on the type Int32.
type System.Int32 with
    member this.FromString( s : string ) =
       System.Int32.Parse(s)

let testFromString str =  
    let mutable i = 0
    // Use the extension method.
    i <- i.FromString(str)
    printfn "%d" i

testFromString "500"

The جديد مثيل عضو will appear مثل أي غير ذلك أسلوب of the Int32 نوع في IntelliSense, but فقط when the وحدة نمطية? that يحتوي على the ملحق هو فتح أو otherwise في نطاق.

راجع أيضًا:

المبادئ

الأعضاء (F#)

موارد أخرى

مرجع لغة ب #