使用F#类型提供程序如何实现基础构造函数调用作为构造函数定义的一部分

时间:2014-03-28 08:57:19

标签: f# type-providers

我想要做的是创建一个在C#中调用其基本构造函数的提供类型:

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

我目前最接近的是:

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

虽然具有相同的功能但并不完全相同。

我用来构建ProvideConstructor的代码如下:

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 -> <@@ () @@>

1 个答案:

答案 0 :(得分:3)

它实际上是ProvideTypes.fs中的一个错误,现在已在最新版本中修复。由于@desco

,它可以在codeplex的常用位置获得

因此,这段代码实际上是正确形成的基础构造函数调用所需的全部内容:

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 -> <@@ () @@>