Comment accéder à un membre protégé
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)
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)