2010-03-02 52 views
6

Tengo el siguiente código en extensión de tipo (en F #) que invoca un método protegido de una clase hereda (en C#) pero obtengo la excepción (ver a continuación). ¿Hay una solución para esto?Cómo acceder al miembro protegido

let getPagereference id = 
    this.ConstructPageReference(id) 

El miembro o 'ConstructPageReference' objeto constructor no es accesible. Solo se puede acceder a los miembros privados desde el tipo de declaración. Solo se puede acceder a los miembros protegidos desde un tipo extendido y no se puede acceder a ellos desde expresiones lambda internas.

Actualización:

He tratado siguiente, pero conseguir el mismo resultado

let getPagereference id = 
    base.ConstructPageReference(id) 

Actualización 2 (solución):

aquí está el código, como era,

type MyNewType() = 
    inherit SomeAbstractType() 

    let getPagereference id = 
     base.ConstructPageReference(id) 

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

esta es la forma en que debería haber sido:

type MyNewType() = 
    inherit SomeAbstractType() 

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

    override this.SomeMethod()= 
     let id = 0 
     let pr = this.ConstructPageReference(id) 
+0

F # (y AFAIK todos los lenguajes CLI) respeta los modificadores de acceso: http://msdn.microsoft.com/en-us/library/ms173121.aspx –

+0

O tal vez no entendí la pregunta ... –

+0

decir bien que para f # interactivo – Enes

Respuesta

6

Gabe es correcta. Su código:

let getPagereference id = 
    this.ConstructPageReference(id) 

es la misma que

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

y está, por tanto, implícitamente intenta llamar a un método de base desde el interior de una expresión lambda. Tendrá que hacer esto desde un miembro, en lugar de una función de límite.

6

apuesto a la parte clave es la no se puede acceder desde lambda interior expresiones. Probablemente estés tratando de hacer el acceso desde dentro de un lambda.

Ha intentado

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

desafortunadamente no lo hago – Enes

Cuestiones relacionadas