2014-03-28 7 views
7

Was Im a bereitgestellt Art zu tun versucht, ist zu erstellen, wie dies in C# seinen Basiskonstruktor ruft:Verwendung von F # Typ-Anbietern wie Sie eine Basis Konstruktoraufruf als Teil der Konstruktordefinition implementieren

public class SubclassController : BaseClass 
{ 
    public SubclassController (IntPtr handle) : base (handle) 
    {} 
} 

Die nächstgelegene Ich kann derzeit erhalten ist das:

public sealed class SubclassController : BaseClass 
{ 
    public SubclassController (IntPtr handle) 
    { 
     this; 
     base..ctor (handle); 
    } 

Welche obwohl die gleiche Funktionalität ist nicht ganz das gleiche.

Der Code Ich verwende ist die ProvidedConstructor zu bauen, wie folgt:

let providedConstructor = ProvidedConstructor([ProvidedParameter("handle", typeof<IntPtr>)]) 
let ctorInfo = typeof<SubclassController>.GetConstructor(BindingFlags.Public ||| BindingFlags.Instance, null, [|typeof<IntPtr>|], null) 
providedConstructor.BaseConstructorCall <- fun args -> ctorInfo, args 
providedConstructor.InvokeCode <- fun args -> <@@() @@> 

Antwort

3

Es war tatsächlich ein Fehler in ProvidedTypes.fs, die in der neuesten Version nun behoben worden ist. Es ist von der üblichen Stelle bei codeplex dank verfügbar

Also dieser Code @desco ist eigentlich alles, das für einen korrekt gebildet Basiskonstruktor Aufruf benötigt:

let providedConstructor = ProvidedConstructor([ProvidedParameter("handle", typeof<IntPtr>)]) 
let ctorInfo = typeof<SubclassController>.GetConstructor(BindingFlags.Public |||   BindingFlags.Instance, null, [|typeof<IntPtr>|], null) 
providedConstructor.BaseConstructorCall <- fun args -> ctorInfo, args 
providedConstructor.InvokeCode <- fun args -> <@@() @@> 
Verwandte Themen