2010-03-02 15 views
6

Aşağıdaki kodu (C#) 'dan devraldığı bir sınıfın korunan bir yöntemini çağıran genişletme türünde (F #) aşağıdaki kodu kullanıyorum ama istisna (aşağıya bakın). Bunun için bir çözüm var mı?Korunan üyeye erişim

let getPagereference id = 
    this.ConstructPageReference(id) 

elemanı ya da nesne, yapıcı 'ConstructPageReference' erişilemez. Özel üyelere yalnızca bildirme türünden erişilebilir. Korunan üyelere sadece bir uzatma türünden erişilebilir ve iç lambda ifadelerinden erişilemez.

Güncelleme:

Aşağıdaki ama aynı sonucu

let getPagereference id = 
    base.ConstructPageReference(id) 

Güncelleme 2 (çözelti) elde denedi: Burada

kodu olduğu gibi geçerli:

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) 
+0

F # (ve AFAIK tüm CLI dilleri) erişim değiştiricileri onurlandırır: http://msdn.microsoft.com/en-us/library/ms173121.aspx –

+0

Ya da belki de soruları anlamadım ... –

+0

Bu f # etkileşimli – Enes

cevap

6

denediniz. Kodunuz:

let getPagereference id = 
    this.ConstructPageReference(id) 

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

aynıdır ve bu nedenle örtülü olarak bir lambda ifadesi içinden bir baz yöntemini çağırmak için çalışıyorsunuz. Bunu, izin verilen bir işlev yerine bir üyeden yapmanız gerekir.

6

Ben anahtar bölümü iç lambda erişilemez ifadelerde olduğu bahis:

bu 0 olmalıydı nasıl. Muhtemelen bir lambda içinden girişi yapmaya çalışıyorsunuzdur.

Gabe doğrudur

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
+0

maalesef – Enes

İlgili konular