结构体构造函数分为主构造函数(primary constructor)和附加构造函数(additional constructor)两类[1] :
主构造函数参数直接跟在类型名称后,如
附加构造函数必须通过关键字显式声明,且需调用主构造函数完成初始化
在F#语言规范中,即使未显式定义主构造函数,结构体仍具有隐式无参数构造函数,该构造函数将所有字段初始化为对应类型的默认值[1] 。
结构体构造函数与类构造函数的差异主要体现在:
必须显式初始化所有字段值,未初始化的字段将被赋予默认值
用户定义的附加构造函数必须接收至少一个参数,避免与隐式无参数构造函数冲突[1]
不能包含虚方法调用,因对象尚未完全实例化
.NET Framework中的TableStructure类实现示例:csharppublic TableStructure(); // 支持3.0至4.8版本框架[2]
该构造函数通过PresentationFramework.dll程序集提供文档结构初始化功能[2] 。
Android平台的ViewStructure类包含两种构造函数重载形式:csharppublic ViewStructure() // API级别23+protected ViewStructure(IntPtr javaReference, JniHandleOwnership transfer) // JNI交互专用[3]
这些构造器采用特性实现JVM交互,适配.NET for Android API 34至36等多个版本[3] 。
数据挖掘领域的MiningStructure类(SQL Server 2008 R2)则通过如下方式初始化:vbPublic Sub New() ' 包含在Microsoft.AnalysisServices.dll中[4]
该构造函数采用默认参数创建挖掘模型结构实例,反映结构体在数据分析场景中的应用特征[4] 。
结构体构造函数支持多种初始化方式:
通过关键字显式定义字段并赋值
使用记录表达式进行批量字段初始化
属性直接赋值语法(如)[1]
副作用执行规则:
主构造函数通过绑定执行初始化代码
附加构造函数需使用关键字实现副作用操作
自我标识符(如)仅在初始化完成后可用[1]
例如Person类的构造函数副作用实现:fsharptype Person(name: string) = struct do printfn "初始化%s" name // 主构造函数副作用 new() =Person("无名氏") then printfn "调用无参构造" // 附加构造函数副作用