خصائص (F#)

خصائص هي الأعضاء التي تمثل قيم المقترنة كائن.

// Property that has both get and set defined.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
   with [accessibility-modifier] get() =
      get-function-body
   and [accessibility-modifier] set parameter =
      set-function-body

// Alternative syntax for a property that has get and set.
[ attributes-for-get ]
[ static ] member [accessibility-modifier-for-get] [self-identifier.]PropertyName =
      get-function-body
[ attributes-for-set ]
[ static ] member [accessibility-modifier-for-set] [self-identifier.]PropertyName
   with set parameter =
      set-function-body

// Property that has get only.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName =
      get-function-body

// Alternative syntax for property that has get only.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
   with get() =
      get-function-body

// Property that has set only.
[ attributes ]
[ static ] member [accessibility-modifier] [self-identifier.]PropertyName
   with set parameter =
      set-function-body

ملاحظات

تمثل خصائص "يحتوي" العلاقة في البرمجة مبنية على الكائن الذي يمثل بيانات التي هو المقترنة مع مثيلات الكائن، أو خصائص ثابتة، مع النوع.

تقوم بتعريف خصائص باستخدام memberالكلمة الأساسية، القيمة معرّف ذاتيا الذي يمثل المثيل الحالي، واسم خاصية. Th هو بناء جملة مصرحة هو متبوعاً ببناء الجملة الذي يحدد في getو setالأساليب، وأيضا باسم accessors . تستخدم نماذج متنوع من بناء الجملة المبين للقراءة والكتابة، للقراءة فقط، وخصائص كتابة فقط. خصائص القراءة فقط، تقوم بتعريف فقط على getالأسلوب؛ لخصائص كتابة فقط، تعرف فقط setالأسلوب. لاحظ أنه عند h الخاصية كـ كلا getو setaccessors، بناء جملة بديل إمكانية تحديد السمات ومعدلات الوصول المختلفة لكل ملحق، كـ في التعليمة البرمجية التالية.

// A read-only property.
member this.MyReadOnlyProperty = myInternalValue
// A write-only property.
member this.MyWriteOnlyProperty with set (value) = myInternalValue <- value
// A read-write property.
member this.MyReadWriteProperty
    with get () = myInternalValue
    and set (value) = myInternalValue <- value

تسمى قيم خاصة تحتوي على بيانات خصائص النسخ لمخازن . على عكس اللغات الأخرى، ب # لا يوفر وسيلة لإنشاء مخزن نسخ ضمني لخاصية؛ يجب عليك تعريف مخازن النسخ بشكل صريح، عادة باستخدام mutable letربط، كما يلي.

type MyClass(x : string) =
    let mutable myInternalValue = x
    member this.MyProperty
         with get() = myInternalValue
         and set(value) = myInternalValue <- value

خصائص القراءه/الكتابه، والتي تحتوي على كلاهما على getو setالطريقة، الترتيب getو setيمكن عكس. بدلاً من ذلك، يمكنك توفير بناء الجملة المبين ل getفقط و بناء الجملة المبين ل setفقط بدلاً من استخدام بناء الجملة المدمجة. عند القيام بهذا يجعل من السهل التعليق خارج الفردية getأو setأسلوب، وإذا كان هذا هو ما قد تحتاج إلى do. Th هو بدلاً من استخدام بناء الجملة المركبة هو في التعليمة البرمجية التالية.

member this.MyReadWriteProperty with get () = myInternalValue
member this.MyReadWriteProperty with set (value) = myInternalValue <- value

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

يمكن تطبيق سمات إلى الخصائص. إلى يطبق الكتابة إلى خاصية, سمة السمة تشغيل سطر منفصل قبل الخاصية. لمزيد من المعلومات، راجع السمات (F#).

بشكل افتراضي، خصائص هي عمومية. يمكن أيضا تطبيق معدلات الوصول إلى الخصائص. لتطبيق معدّل وصول ذوي الاحتياجات الخاصة، إضافته مباشرة قبل اسم خاصية إذا أنه هو لتطبيق كلا getو setوظائف؛ إضافته من قبل getو setالكلمات الأساسية إذا كان مختلفاً الوصول هو المطلوبة لكل أسلوب استرجاع قيمة. accessibility-modifierيمكن أن واحد مما يلي: public, private, internal. لمزيد من المعلومات، راجع التحكم بالوصول (F#).

يتم تنفيذ تطبيقات خاصية في كل مرة تقوم خاصية هو الوصول إليها.

ثابت و مثيل خصائص

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

التعريف التالي للخاصية ثابت يستند إلى سيناريو الذي لديك على حقل ثابتة myStaticValueهو تخزين مساعد للخاصية.

static member MyStaticProperty
    with get() = myStaticValue
    and set(value) = myStaticValue <- value

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

اكتب التعليق التوضيحي ل خصائص

في كثير من الحالات، لدى المحول البرمجي معلومات كافية إلى الاستدلال نوع خاصية من نوع sإلىre نسخة احتياطية، ولكن يمكنك تعيين النوع صراحة بإضافة تعليق توضيحي لنوع.

// To apply a type annotation to a property that does not have an explicit 
// get or set, apply the type annotation directly to the property.
member this.MyProperty1 : int = myInternalValue
// If there is a get or set, apply the type annotation to the get or set method.
member this.MyProperty2 with get() : int = myInternalValue

استخدام خاصية التعيين Accessors

يمكنك تعيين خصائص توفر setaccessors باستخدام <-عامل التشغيل.


// Assume that the constructor argument sets the initial value of the
// internal backing store.
let mutable myObject = new MyType(10)
myObject.MyProperty <- 20
printfn "%d" (myObject.MyProperty)

المخرج هو 20.

خصائص مجردة

يمكن أن تكون الخصائص مجردة. كما بأساليب مجردة فقط يعني أنه هو dهوpatch ظاهري المقترن بالخاصية. يمكن أن تكون الخصائص مجردة قيمة مجردة بشكل صحيح، التي هو، دون تعريف في نفس الفئة. الفئة التي تحتوي على مثل هذه خاصية هو فئة مجردة لذلك. بدلاً من ذلك، تجريدية يمكن فقط يعني التي خاصية هو الظاهرية، وفي هذه الحالة، يجب أن يكون تعريف موجودة في نفس الفئة. لاحظ أن خصائص مجردة يجب أن لا تكون خاصة، وإذا كان ملحق واحد هو مجردة، آخر يجب أن يكون مجردة. لمزيد من المعلومات حول فئات مجردة، راجع فئات مجردة (F#).

// Abstract property in abstract class.
// The property is an int type that has a get and
// set method
[<AbstractClass>]
type AbstractBase() =
   abstract Property1 : int with get, set

// Implementation of the abstract property
type Derived1() =
   inherit AbstractBase()
   let mutable value = 10 
   override this.Property1 with get() = value and set(v : int) = value <- v

// A type with a "virtual" property.
 type Base1() =
   let mutable value = 10
   abstract Property1 : int with get, set
   default this.Property1 with get() = value and set(v : int) = value <- v

// A derived type that overrides the virtual property
type Derived2() =
   inherit Base1()
   let mutable value2 = 11
   override this.Property1 with get() = value2 and set(v) = value2 <- v

راجع أيضًا:

المرجع

وظائف (F#)

المبادئ

الأعضاء (F#)