2015-03-23 29 views
5

Sto scrivendo un tipo F # e ho difficoltà a capire come fare riferimento a una funzione membro dal costruttore al momento dell'inizializzazione. Penso che dovrei usare un binding do, ma poi il do do non può capire le funzioni dei membri. Non c'è modo di aggirare questo?Funzioni membro di chiamata F # nel costruttore

risposta

12

Si può fare in questo modo:

type MyClass() as this = // Note as this 

    do this.SayHello() 

    member this.SayHello() = 
     do printfn "Hello from constructor!" 

Ma in generale non è una buona pratica

+1

Grazie. Funziona come promesso, ma perché non è una buona pratica? – user3685285

+8

Diciamo che il metodo usa altri campi di classe o membri che non sono ancora inizializzati o dipendono da qualche risorsa extra (file, connessione ecc.) Che potrebbe non essere pronta. In questo caso otterrai un'eccezione di runtime durante la costruzione. Se prendi in considerazione l'ereditarietà, le cose potrebbero peggiorare. – Petr

+0

Buon punto. Grazie! – user3685285

Problemi correlati