如何访问受保护的成员

时间:2010-03-02 20:27:48

标签: f# protected

我在扩展类型(在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)

2 个答案:

答案 0 :(得分:7)

加布是正确的。你的代码:

let getPagereference id =
  this.ConstructPageReference(id)

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

因此您隐式尝试从lambda表达式中调用基本方法。您需要从成员而不是let-bound函数执行此操作。

答案 1 :(得分:6)

我敢打赌,关键部分是无法从内部lambda表达式访问 。您可能正在尝试从lambda中进行访问。

你试过吗

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