بني (F#)

على بنية هو نوع ضغط كائن الذي يمكن أن يكون أكثر فعالية من فصل دراسي ل أنواع التي تحتوي على مقدار مربع متوسط من بيانات وسلوك بسيط.

[ attributes ]
type [accessibility-modifier] type-name =
   struct
      type-definition-elements
   end
// or
[ attributes ]
[<StructAttribute>]
type [accessibility-modifier] type-name =
   type-definition-elements

ملاحظات

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

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

type-definition-elementsفي بناء الجملة السابقة تمثل تصريحات عضو و ملفات تعريف. يمكن أن يكون لبنية المنشئات و mutable و التغير الحقول، و أنها يمكن أن تقوم بتعريف الأعضاء و واجهة تطبيقات. لمزيد من المعلومات، راجع الأعضاء (F#).

لا يمكن أن يشارك في وراثة بني، لا يمكن أن تتضمن letأو doروابط، و يمكن أن تحتوي بصورة متكررة على حقول من النوع الخاصة بها (على الرغم من أنه يمكنها أن تحتوي على مرجع خلايا التي تشير إلى نوع الخاصة بهم).

نظراً لعدم السماح لبنيات letروابط، يجب أن تقوم بتعريف حقول في بنيات باستخدام valكلمة أساسية. valالأساسية بتعريف حقل وبه نوع ولكن لا يسمح تهيئة. بدلاً من ذلك، valتصريحات تهيئة إلى صفر أو null. ولهذا السبب، بني له الدالة الإنشائية ضمني (بمعنى، معلمات المعطاة مباشرة بعد اسم بنية في التصريح) يتطلب ذلك valأن annotated تصريحات مع DefaultValueسمة. دعم بني له معرف الدالة الإنشائية لا يزال تهيئة-صفر. ولذلك، DefaultValueهو سمة إعلان غير صالح لهذه القيمة صفر حقل. المنشئات الضمني للبنيات عدم تنفيذ أية الاجراءات لأنه letو doمسموح روابط على النوع، ولكن تتوفر pكـsed قيم المعلمة الدالة الإنشائية الضمني في كـ الحقول الخاصة.

قد تتضمن المنشئات صريحة تهيئة للحقل قيم. إذا كان لديك بنية يحتوي الدالة الإنشائية صريحة، لا يزال يعتمد تهيئة بصفر؛ ومع ذلك، لم تفعل استخدم DefaultValueالسمة تشغيل valbeca تصريحات استخدم يتعارض مع صريح المنشئ. ل المزيد من المعلومات حول valتصريحات، راجع حقول واضحة: قيمة كلمة أساسية (F#).

السمات و معدلات الوصول المسموح بها تشغيل بني، و تتبع نفس القواعد كتلك المتعلقة بأنواع غير ذلك. للمزيد من المعلومات، راجع السمات (F#) والتحكم بالوصول (F#).

توضح الأمثلة تعليمات برمجية التالية ملفات تعريف بنية.

// In Point3D, three immutable values are defined.
// x, y, and z will be initialized to 0.0.
type Point3D =
   struct
      val x: float
      val y: float
      val z: float
   end

// In Point2D, two immutable values are defined.
// Point2D has an explicit constructor.
// You can create zero-initialized instances of Point2D, or you can
// pass in arguments to initialize the values.
type Point2D =
   struct
      val X: float
      val Y: float
      new(x: float, y: float) = { X = x; Y = y }
   end

راجع أيضًا:

المرجع

الفئات (F#)

السجلات (F#)

المبادئ

الأعضاء (F#)

موارد أخرى

مرجع لغة ب #