我在扩展类型(在F#中)有以下代码,它调用它继承的类的受保护方法(在C#中),但我得到了异常(见下文).这有解决方法吗?
let getPagereference id =
this.ConstructPageReference(id)
Run Code Online (Sandbox Code Playgroud)
无法访问成员或对象构造函数"ConstructPageReference".只能在声明类型中访问私有成员.受保护的成员只能从扩展类型访问,并且无法从内部lambda表达式访问.
更新:
我试过跟随但得到相同的结果
let getPagereference id =
base.ConstructPageReference(id)
Run Code Online (Sandbox Code Playgroud)
更新2(解决方案):
这是代码:
type MyNewType() =
inherit SomeAbstractType()
let getPagereference id =
base.ConstructPageReference(id)
override this.SomeMethod()=
let id = 0
let pr = getPagereference id
Run Code Online (Sandbox Code Playgroud)
这应该是这样的:
type MyNewType() =
inherit SomeAbstractType()
member this.ConstructPageReference(id) =
base.ConstructPageReference(id)
override this.SomeMethod()=
let id = 0
let pr = this.ConstructPageReference(id)
Run Code Online (Sandbox Code Playgroud)
我敢打赌关键部分是无法从内部lambda表达式访问.您可能正在尝试从lambda中进行访问.
你有没有尝试过
member this.getPagereference(id) =
this.ConstructPageReference(id)
Run Code Online (Sandbox Code Playgroud)
加布是对的.你的代码:
let getPagereference id =
this.ConstructPageReference(id)
Run Code Online (Sandbox Code Playgroud)
是相同的
let getPagereference = fun id ->
this.ConstructPageReference(id)
Run Code Online (Sandbox Code Playgroud)
因此,您隐式尝试从lambda表达式中调用基本方法.您需要从成员而不是let-bound函数执行此操作.