Question

Je code suivant dans le type d'extension (en F #) qui invoque un procédé protégé d'une classe hérite de (en C #) mais je reçois l'exception (voir ci-dessous). Y at-il une solution de contournement pour cela?

let getPagereference id =
    this.ConstructPageReference(id)

Le constructeur de membre ou d'un objet 'ConstructPageReference' est pas accessible. Les membres privés ne peuvent être accessibles à partir de l'intérieur du type déclarant. membres protégés ne peuvent être accessibles à partir d'un type extension et ne sont pas accessibles à partir d'expressions lambda interne.

Mise à jour:

J'ai essayé suivante mais obtenir le même résultat

let getPagereference id =
    base.ConstructPageReference(id)

Mise à jour 2 (solution):

est ici le code tel qu'il était:

type MyNewType() =
    inherit SomeAbstractType()

    let getPagereference id =
        base.ConstructPageReference(id)

    override this.SomeMethod()=
       let id = 0
       let pr = getPagereference id

est la façon dont il aurait dû être:

type MyNewType() =
    inherit SomeAbstractType()

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

    override this.SomeMethod()=
       let id = 0
       let pr = this.ConstructPageReference(id)
Était-ce utile?

La solution

Gabe est correct. Votre code:

let getPagereference id =
  this.ConstructPageReference(id)

est le même que

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

et vous êtes donc implicitement essayez d'appeler une méthode de base à partir d'une expression lambda. Vous devrez le faire à partir d'un membre, plutôt qu'une fonction let liée.

Autres conseils

Je parie que la partie clé est la ne peuvent pas être accessibles à partir d'expressions lambda intérieures . Vous essayez probablement de faire de l'accès à partir d'un lambda.

Avez-vous essayé

member this.getPagereference(id) = 
    this.ConstructPageReference(id) 
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top