Как получить доступ к защищенному участнику

У меня есть следующий код в расширяющемся типе (в 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)
7
задан abatishchev 25 December 2014 в 22:54
поделиться

2 ответа

Гейб прав. Ваш код:

let getPagereference id =
  this.ConstructPageReference(id)

такой же, как

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

и поэтому вы неявно пытаетесь вызвать базовый метод из лямбда-выражения. Вам нужно сделать это из члена, а не из функции let-bound.

8
ответ дан 6 December 2019 в 12:48
поделиться

Готов поспорить, что ключевой частью является нельзя получить доступ из внутренних лямбда-выражений. Вероятно, вы пытаетесь получить доступ из внутренней лямбды.

Вы пробовали

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
8
ответ дан 6 December 2019 в 12:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: