2010-03-02 9 views
6

Ho il seguente codice nel tipo di estensione (in F #) che richiama un metodo protetto di una classe ereditata da (in C#) ma ottengo l'eccezione (vedi sotto). C'è una soluzione per questo?Come accedere all'elemento protetto

let getPagereference id = 
    this.ConstructPageReference(id) 

Il membro oi 'ConstructPageReference' dell'oggetto costruttore non è accessibile. È possibile accedere ai membri privati ​​solo all'interno del tipo di dichiarazione. È possibile accedere ai membri protetti solo da un tipo di estensione e non è possibile accedere alle espressioni lambda interne.

Aggiornamento:

Ho provato a seguito ma ottenere lo stesso risultato

let getPagereference id = 
    base.ConstructPageReference(id) 

Aggiornamento 2 (soluzione):

ecco il codice come lo era:

type MyNewType() = 
    inherit SomeAbstractType() 

    let getPagereference id = 
     base.ConstructPageReference(id) 

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

questo è come dovrebbe essere:

type MyNewType() = 
    inherit SomeAbstractType() 

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

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

F # (e AFAIK tutte le lingue CLI) onora modificatori di accesso: http://msdn.microsoft.com/en-us/library/ms173121.aspx –

+0

O forse non ho capito la domanda ... –

+0

ben dire per f # interattivo – Enes

risposta

6

Gabe è corretta. Il tuo codice:

let getPagereference id = 
    this.ConstructPageReference(id) 

è lo stesso di

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

e si sono quindi implicitamente tentando di chiamare un metodo di base all'interno di un'espressione lambda. Dovrai farlo da un membro, piuttosto che una funzione let-bound.

6

scommetto la parte fondamentale è la non si può accedere da lambda interna espressioni. Probabilmente stai tentando di accedere da un lambda.

Hai provato

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

sfortunatamente no – Enes

Problemi correlati