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


У меня есть следующий код в расширяющемся типе (в 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)
2 6

2 ответа:

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

let getPagereference id =
  this.ConstructPageReference(id)

То же самое, что

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

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

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

Вы пробовали

member this.getPagereference(id) = 
    this.ConstructPageReference(id)