وراثة (F#)

يتم استخدام توريث إلى صياغة علاقة "هو-" أو subtyping في البرمجة مبنية على الكائن.

تعيين علاقات توريث

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

type MyDerived(...) =
   inherit MyBase(...)

يمكن أن يكون لفصل دراسي على الأكثر واحد مباشر فئة الأساس. إذا لم تحدد فئة أساسية باستخدام inheritكلمة أساسية، ترث الفئة ضمنياً من Object.

الأعضاء موروثة

إذا كانت فئة ترث من فئة أخرى، الأعضاء فئة Base وأساليب متوفرة إلى مستخدمي مشتقة فئة كما لو كانوا الأعضاء في فئة مشتقة مباشرة.

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

الكلمة الأساسية baseهو اشتقاق المتوفرة في الفئات ويشير إلى مثيل فئة Base. هو المستخدمة self-معرّف.

ظاهري تجاوزات ووظائف

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

abstract member method-name : type

default self-identifier.method-name argument-list = method-body

و في فئة مشتقة، يتبع يمنع هذا الأسلوب الظاهري هذا النمط:

override self-identifier.method-name argument-list = method-body

إذا قمت بحذف تطبيق الافتراضي في فئة الأساس، تصبح فئة الأساس فئة مجردة.

يوضح المثال تعليمات برمجية التالي التصريح أسلوب ظاهري جديد function1في فئة الأساس وكيفية تجاوز في class. مشتقة

type MyClassBase1() =
   let mutable z = 0
   abstract member function1 : int -> int
   default u.function1(a : int) = z <- z + a; z

type MyClassDerived1() =
   inherit MyClassBase1()
   override u.function1(a: int) = a + 1

المنشئون والتوريث

يجب استدعاء المنشئ للفئة الأساسية في فئة مشتقة. The الوسيطات for the فئة الأساس الدالة الإنشائية appear في the وسيطة قائمة في the inherit clause. The قيم that are used must be determined من the الوسيطات supplied إلى the الفئة المشتقة الدالة الإنشائية.

The following تعليمات برمجية shows a فئة الأساس و a الفئة المشتقة, الموقع the الفئة المشتقة calls the فئة الأساس الدالة الإنشائية في the يورث clause:

type MyClassBase2(x: int) =
   let mutable z = x * x
   do for i in 1..z do printf "%d " i


type MyClassDerived2(y: int) =
   inherit MyClassBase2(y * 2)
   do for i in 1..y do printf "%d " i

Alternatives إلى توريث

في cases الموقع a ثانوي modification of a نوع هو مطلوب, consider using an كائن تعبير كـ an بديل إلى توريث. The following مثال illustrates the استخدم of an كائن تعبير كـ an بديل إلى creating a جديد derived نوع:

open System

let object1 = { new Object() with
      override this.ToString() = "This overrides object.ToString()"
      }

printfn "%s" (object1.ToString())

For المزيد معلومات حول كائن expressions, see كائن تعبيرات (F#).

When you are creating كائن hierarchies, consider using a discriminated توحيد instead of توريث. Discriminated الاتحادات can also model varied سلوك of different الكائنات that يجعله مشتركًا a عام overall نوع. A مفرد discriminated توحيد can often eliminate the need for a رقم of derived فئات that are ثانوي variations of each غير ذلك. For معلومات حول discriminated الاتحادات, see الاتحادات discriminated (F#).

راجع أيضًا:

المرجع

كائن تعبيرات (F#)

موارد أخرى

مرجع لغة ب #