سؤال

لدي رمز يلي في تمديد النوع (في F#) الذي يستدعي طريقة محمية لفئة يرثها من (في C#) ولكن أحصل على الاستثناء (انظر أدناه). هل هناك حل بديل لهذا؟

let getPagereference id =
    this.ConstructPageReference(id)

لا يمكن الوصول إلى العضو أو مُنشئ الكائن "ConstructPagereference". لا يجوز الوصول إلى الأعضاء الخاصين فقط من داخل نوع التصريح. لا يمكن الوصول إلى الأعضاء المحميين فقط من نوع تمديد ولا يمكن الوصول إليه من تعبيرات Lambda الداخلية.

تحديث:

لقد حاولت المتابعة ولكن الحصول على نفس النتيجة

let getPagereference id =
    base.ConstructPageReference(id)

تحديث 2 (الحل):

هنا هو الرمز كما كان:

type MyNewType() =
    inherit SomeAbstractType()

    let getPagereference id =
        base.ConstructPageReference(id)

    override this.SomeMethod()=
       let id = 0
       let pr = getPagereference id

هكذا كان ينبغي أن يكون:

type MyNewType() =
    inherit SomeAbstractType()

    member this.ConstructPageReference(id) =
        base.ConstructPageReference(id)

    override this.SomeMethod()=
       let id = 0
       let pr = this.ConstructPageReference(id)
هل كانت مفيدة؟

المحلول

جابي صحيح. الكود الخاص بك:

let getPagereference id =
  this.ConstructPageReference(id)

بالضبط مثل

let getPagereference = fun id ->
  this.ConstructPageReference(id)

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

نصائح أخرى

أراهن أن الجزء الرئيسي هو لا يمكن الوصول إليها من تعبيرات لامدا الداخلية. ربما تحاول القيام بالوصول من داخل Lambda.

هل جربت

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top