2010-03-02 9 views
6

Ich habe folgenden Code in Erweiterung Typ (in F #), die eine geschützte Methode einer Klasse erbt es erbt (in C#) , aber ich bekomme die Ausnahme (siehe unten). Gibt es einen Workaround dafür?Wie Zugriff auf geschützte Member

let getPagereference id = 
    this.ConstructPageReference(id) 

Das Element oder 'ConstructPageReference' Objektkonstruktor ist nicht zugänglich. Auf private Mitglieder darf nur vom deklarierenden Typ aus zugegriffen werden. Auf geschützte Member kann nur von einem Erweiterungstyp aus zugegriffen werden, auf den von internen Lambda-Ausdrücken aus nicht zugegriffen werden kann.

Update:

Ich habe versucht, folgende, aber immer das gleiche Ergebnis

let getPagereference id = 
    base.ConstructPageReference(id) 

Update 2 (Lösung):

hier ist der Code, wie es war:

type MyNewType() = 
    inherit SomeAbstractType() 

    let getPagereference id = 
     base.ConstructPageReference(id) 

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

dies ist, wie es hätte sein sollen:

type MyNewType() = 
    inherit SomeAbstractType() 

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

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

F # (und AFAIK alle CLI-Sprachen) ehrt Zugriffsmodifizierer: http://msdn.microsoft.com/en-us/library/ms173121.aspx –

+0

Oder vielleicht habe ich die Frage nicht verstanden ... –

+0

gut sagen dass zu f # interaktiv – Enes

Antwort

6

Gabe ist richtig. Ihr Code:

let getPagereference id = 
    this.ConstructPageReference(id) 

ist die gleiche wie

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

und Sie versuchen daher implizit eine Basismethode aufrufen aus einem Lambda-Ausdruck. Sie müssen dies von einem Mitglied und nicht von einer gebundenen Funktion tun.

6

Ich wette, die Schlüsselrolle von innerem Lambda die ist, kann nicht zugegriffen werden Ausdrücke. Sie versuchen wahrscheinlich, den Zugriff innerhalb eines Lambda durchzuführen.

Haben Sie

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

leider nicht – Enes

Verwandte Themen