7

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

2 回答 2

8

加布是对的。你的代码:

let getPagereference id =
  this.ConstructPageReference(id)

是相同的

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

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

于 2010-03-02T21:33:09.683 回答
8

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

你有没有尝试过

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
于 2010-03-02T21:16:19.053 回答