class - 如何使用默认构造函数创建记录类

标签 class f# constructor struct

结构有默认构造函数,就像我一样

type tagONEDEV_FlowRec =
    struct
        .......
    end

我可以做 new DeviceModel.tagONEDEV_FlowRec()但它不适用于此:
let (<++|) device bytes size =
    let unmanagedPtr = Marshal.AllocHGlobal(size : int)
    Marshal.Copy( (bytes : byte array), 0, unmanagedPtr, size)
    Marshal.PtrToStructure(unmanagedPtr, (device : obj)) // Here
    Marshal.FreeHGlobal(unmanagedPtr)

我也需要一个记录课
[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type tagONEDEV_FlowRec = { 
    mutable ....;}

或者
type tagONEDEV_FlowRec =
    class
        .......
    end

但是这里没有默认构造函数,并且结构非常大到零手动初始化它们,那么我如何将这些类与默认构造函数一起使用?

如果我找不到解决方案,我认为在 C# 甚至 VB.NET 上重新编码这部分对我来说会更快。听起来像拐杖解决方案,但看起来我还不能用 F# OOP 部分拨号。

另外:我不想输入的是:
               {TimeRec     = 0; 
                Num         = 0us;
                FlagErr     = 0us;
                C6          = 0.0;
                C2H6        = 0.0;
                C3H8        = 0.0;
                CH4         = 0.0;
                CO2         = 0.0;
                iC4H10      = 0.0;
                iC5H12      = 0.0;
                neoC5H12    = 0.0;
                N2          = 0.0;
                nC5H12      = 0.0;
                O2          = 0.0;
                nC4H10      = 0.0;
                He          = 0.0;
                H2          = 0.0;
                H2O         = 0.0;
                id          = 0us; }

<-默认情况下,这就是我想要的,因为我有很多更大的结构,然后编写这样的构造函数是邪恶的。

最佳答案

好像我找到了一个工作技巧:

[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type tagONEDEV_FlowRec =
    class
        [<DefaultValue>] val RecTime         : int;
        [<DefaultValue>] val FlowTime        : int;
        [<DefaultValue>] val AbsPress        : single;
        [<DefaultValue>] val T               : single;
        [<DefaultValue>] val DP_V_FlowRate   : single;
        [<DefaultValue>] val Volume          : double;
        [<DefaultValue>] val Energy          : double;
        [<DefaultValue>] val id              : UInt16;
        new() = {} 
    end

关于class - 如何使用默认构造函数创建记录类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7721902/

相关文章:

C++ 函数从对象数组返回对象的拷贝。这是默认行为吗?

java - 一个类怎么会有自己类型的成员,这不是无限递归吗?

f# - 数据包超时异常

javascript - 如何为传递给构造函数的对象设置默认属性?

c++ - char 赋值中的不兼容类型?

c++ - 是否可以在模板类内部使用类堆栈元素的 vector ?

javascript - 调用父类中被重写的函数

c++ - boost::ptr_vector 构造函数

f# - F# 中全局变量的样式指南

visual-studio - 刚刚安装了 Visual Studio 的 v16.8.3,我似乎正在获取 F# 的标签