Как получить доступ к защищенному члену - PullRequest
6 голосов
/ 02 марта 2010

У меня есть следующий код в расширяющем типе (в F #), который вызывает защищенный метод класса, от которого он наследуется (в C #) но я получаю исключение (см. ниже). Есть ли обходной путь для этого?

let getPagereference id =
    this.ConstructPageReference(id)

Элемент или конструктор объекта 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)

Ответы [ 2 ]

7 голосов
/ 03 марта 2010

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

let getPagereference id =
  this.ConstructPageReference(id)

совпадает с

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

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

7 голосов
/ 03 марта 2010

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

Вы пробовали

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...