gpt4 book ai didi

.net - 使用隐式构造函数向 F# 类型添加 StructLayout 属性

转载 作者:行者123 更新时间:2023-12-02 09:47:46 27 4
gpt4 key购买 nike

我有:

type Package =
abstract member Date : int
abstract member Save : unit -> unit

[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type Instant(date : int, value : int) =
let mutable _date = date
let mutable _value = value
member X.Value : int = _value
interface Package with
member X.Date : int = _date
member X.Save() = ...

但出现错误:只有没有隐式构造函数的结构和类可以被赋予“StructLayout”属性

所以我意识到它一定是相似的:

type Instant =
struct
val Date : byte array
...

但是这样我就失去了我的界面。例如,在 C# 中,对于这种类型的类添加 type:StructLayout 是可能的(我认为)。我必须如何重构代码才能避免此错误?

最佳答案

正如错误消息所述,StructLayout 应该与 explicit constructors 一起使用。 :

type Package =
abstract member Date : int
abstract member Save : unit -> unit

[<type:StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)>]
type Instant =
val mutable Date: int
val mutable Value: int
new(date, value) = {Date = date; Value = value}

interface Package with
member x.Date = x.Date
member x.Save() = x.Value |> ignore

如果您对 FieldOffset 有任何其他问题,请查看代码示例 here .

关于.net - 使用隐式构造函数向 F# 类型添加 StructLayout 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13154650/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com