2010-03-02 176 views
6

我在擴展類型(在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) 
+0

F#(和AFAIK所有CLI語言)授予訪問修飾符:http://msdn.microsoft.com/en-us/library/ms173121.aspx – 2010-03-02 20:31:06

+0

或者,也許我不明白這個問題... – 2010-03-02 20:32:36

+0

好說那對f#互動 – Enes 2010-03-02 20:33:26

回答

6

加布是正確的。您的代碼:

let getPagereference id = 
    this.ConstructPageReference(id) 

相同

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

,因此你暗中試圖從lambda表達式中調用基方法。你需要從一個成員來完成,而不是一個允許的功能。

6

我敢打賭,關鍵部分是不能從內拉姆達訪問表達式。你可能試圖從lambda內部進行訪問。

你試過

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

不幸的是我沒有 – Enes 2010-03-02 21:19:04