2014-07-08 15 views
5

Ist es möglich, ein Objekt in F # mithilfe eines Objektausdrucks mit einer Schnittstelle zu dekorieren? ZB:Erweitern eines Objekts mit einer Schnittstelle durch einen Objektausdruck

type IFoo = abstract member foo : string 
type IBar = abstract member bar : string 
let a = { new IFoo with member x.foo = "foo" } 

/// Looking for a variation on the below that does compile, the below doesn't 
let b = { a with 
      interface IBar with 
       member x.Bar = "bar" } 

Antwort

4

Sie können ein Objekt nicht mit einer Schnittstelle zur Laufzeit verlängern, aber man kann es wickelt mit einem anderen Objekt:

let makeB (a: IFoo) = 
    { 
     new IFoo with 
      member x.foo = a.foo 
     interface IBar with 
      member x.bar = "bar" 
    } 


let a = { new IFoo with member x.foo = "foo" } 
let b = makeB a 
+0

danke, die die Frage beantwortet, obwohl es wasn Ich habe auf die Antwort gehofft. Ich muss jetzt mein Design überdenken. Ist stackoverflow der richtige Ort dafür, oder sollte ich woanders hingehen? – Bram

+0

Link zu meiner Follow-up-Frage: https://StackOverflow.com/Questions/24645007/Design-Alternatives-to-Extending-Object-with-interface – Bram

Verwandte Themen