السمات (F#)

تمكين السمات بيانات التعريف إلى ستطبق إلى بناء برمجة.

[<target:attribute-name(arguments)>]

ملاحظات

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

attribute-nameيشير إلى الاسم (من المحتمل أن يكون مؤهلاً مساحات الاسم) من نوع سمة صالحة، مع أو بدون اللاحقة Attributeالتي هو عادة ما تستخدم في أسماء نوع السمة. على سبيل المثال، نوع ObsoleteAttributeيمكن أن يتم تقصير إلى فقط Obsoleteفي هذا سياق.

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

property-name = property-value

مثل خاصية يمكن أن تكون عمليات التهيئة بأي ترتيب، ولكن يجب أن تتبع أي الوسيطات الموضعية. التالي هو مثال عن سمة تستخدم الوسيطات الموضعية و عمليات التهيئة للخاصية.

open System.Runtime.InteropServices

[<DllImport("kernel32", SetLastError=true)>]
extern bool CloseHandle(nativeint handle)

في ترتيب هو سبيل المثال، السمة هو DllImportAttribute، هنا يستخدم في نموذج مصغر. وسيطة الأولى هو معلمة الموضعية والثاني هو خاصية.

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

يمكن تطبيق السمات في F# إلى بنية البرمجة التالية: وظائف ووظائف تجميعات، الوحدات النمطية وأنواع (الفصول الدراسية، السجلات، بني، الواجهات، تفويضات، التعدادات، الاتحادات، و هكذا)، المنشئات وخصائص حقول، معلمات ومعلمات نوع، و قيم إرجاع. السمات غير مسموح بها تشغيل letروابط داخل الفئات أو التعبيرات، أو تعبيرات سير العمل.

وعادة ما يظهر التعريف سمة مباشرة قبل تصريح الهدف السمة. يمكن استخدام تعريفات سمة متعددة معا، كـ يتبع.

[<Owner("Jason Carlson")>]
[<Company("Microsoft")>]
type SomeType1 =

يمكنك الاستعلام السمات في وقت التشغيل باستخدام الانعكاس.NET.

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

[<Owner("Darren Parker"); Company("Microsoft")>]
type SomeType2 =

تضمين السمات مواجهة عادة Obsoleteسمات السمات، سمات اعتبارات الأمان، لدعم COM والسمات التي تتعلق بالملكية من تعليمات برمجية والسمات التي تشير إلى ما إذا كان نوع يمكن يمكن إجراء تسلسل. يلي مثال يوضح استخدم Obsoleteالسمة.

open System

[<Obsolete("Do not use. Use newFunction instead.")>]
let obsoleteFunction x y =
  x + y
  
let newFunction x y =
  x + 2 * y

// The use of the obsolete function produces a warning.
let result1 = obsoleteFunction 10 100
let result2 = newFunction 10 100

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

open System.Reflection
[<assembly:AssemblyVersionAttribute("1.0.0.0")>]
do
   printfn "Executing..."

إذا حذفت السمة الهدف لتطبيق سمة إلى doربط، ومحاولات المحول البرمجي F# إلى تحديد هدف السمة التي من المفيد لتلك السمة. تتضمن الفئات سمة العديد من سمة من نوع AttributeUsageAttributeالتي تحتوي على معلومات حول الأهداف المحتملة معتمدة لتلك السمة. إذا AttributeUsageAttributeيشير إلى أن السمة يعتمد وظائف كهدف، السمة هو المستغرق لتطبيقها على يؤشر الإدخال الرئيسي للبرنامج. إذا AttributeUsageAttributeيشير إلى أن يعتمد السمة كـ semblies كـ، يأخذ المحول البرمجي السمة ليطبقها على كـ sembly. لا يتم يطبق سمات معظم الدالات وتجميعات، ولكن في الحالات الموقع يفعلون، السمة هو الانتقال إلى يطبق دالة الرئيسي للبرنامج. إذا كان الهدف السمة هو المعين بشكل صريح، السمة هو المطبق على الهدف المحدد.

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

السمة الهدف

المثال

تجميع

[<assembly: AssemblyVersionAttribute("1.0.0.0")>]

return

let function1 x : [<return: Obsolete>] int = x + 1

حقل

[<field: DefaultValue>] val mutable x: int

خاصية

[<property: Obsolete>] this.MyProperty = x

المعلمة

member this.MyMethod([<param: Out>] x : ref<int>) = x := 10

كتابة

[<type: StructLayout(Sequential)>]

type MyStruct =

struct

x : byte

y : int

end

راجع أيضًا:

موارد أخرى

مرجع لغة ب #