У меня есть следующий код в расширяющемся типе (в F#), который вызывает защищенный метод класса, которому он наследовался (в C#), но я получаю исключение (см. ниже). Существует ли обходное решение для этого?
let getPagereference id =
this.ConstructPageReference(id)
Участник или конструктор Object 'ConstructPageReference' не доступны. К членам парламента, не занимающим официального поста можно только получить доступ из типа объявления. К защищенным участникам можно только получить доступ от расширяющегося типа и нельзя получить доступ от внутренних лямбда-выражений.
Обновление:
Я попробовал следующее, но получение того же результата
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)
Гейб прав. Ваш код:
let getPagereference id =
this.ConstructPageReference(id)
такой же, как
let getPagereference = fun id ->
this.ConstructPageReference(id)
и поэтому вы неявно пытаетесь вызвать базовый метод из лямбда-выражения. Вам нужно сделать это из члена, а не из функции let-bound.
Готов поспорить, что ключевой частью является нельзя получить доступ из внутренних лямбда-выражений. Вероятно, вы пытаетесь получить доступ из внутренней лямбды.
Вы пробовали
member this.getPagereference(id) =
this.ConstructPageReference(id)