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