F#能否同时使用构造函数参数与属性初始化器?
F# 同时传入构造函数参数与属性初始化的实现方式
当然可以,F#有两种常用写法实现这个需求:
1. 使用with关键字(对象表达式)
先调用构造函数传入参数,再通过with块设置属性,和C#的对象初始化器逻辑一致:
let myObject = MyClass("paramvalue") with | Property1 = "value1" | Property2 = 100
2. 混合构造函数参数与命名属性参数
直接在构造调用中同时传入位置式的构造函数参数和命名式的属性初始化参数:
let myObject = MyClass("paramvalue", Property1 = "value1", Property2 = 100)
这种写法要求属性具备可设置的访问器(set),且构造函数的位置参数要放在命名属性参数之前。
注:第一种方式会生成继承自MyClass的匿名类型实例,但在绝大多数业务场景下,这种类型差异不会造成影响;两种写法最终都能得到可用的MyClass实例。
内容的提问来源于stack exchange,提问作者Matthew MacFarland
相关产品推荐
相关产品推荐

