inheritance - 我可以避免为从接口派生的类编写样板代码吗?
问题描述
我有许多实现接口的类。每当我定义一个类时,我必须在类定义中编写类似这样的内容:
interface Model.IModel with
member this.Assets = modelArg.Assets
member this.AuxData = modelArg.AuxData
member this.Benchmark = modelArg.Benchmark
member this.CalcPeriods = modelArg.CalcPeriods
member this.CashTicker = modelArg.CashTicker
member this.Description = modelArg.Description
member this.FirstValidDate = modelArg.FirstValidDate
member this.Name = modelArg.Name
member this.ParamData = modelArg.ParamData
member this.ParamList = modelArg.ParamList
member this.Strategy = modelArg.Strategy
member this.CalcStartTime with get() = calcStartTime and
set v = calcStartTime <- v
member this.Counter with get() = counter and
set v = counter <- v
有没有办法避免对从接口 IModel 派生的每个类重复此操作?代码在所有情况下都是相同的。
解决方案
为了使讨论更加具体,并且由于评论空间有限,以下内容对您有用还是不合适?
type ModelArg = {
Number: int
Name: string
}
type IModel(modelArg: ModelArg) =
abstract member Number: int
abstract member Name: string
default __.Number = modelArg.Number
default __.Name = modelArg.Name
type ConcreteModel1(modelArg: ModelArg) =
inherit IModel(modelArg)
type ConcreteModel2(modelArg: ModelArg) =
inherit IModel(modelArg)
let modelArg1 = {Number=2; Name ="Joe"}
let modelArg2 = {Number=3; Name = "Jim"}
let getNumberAndName(x: IModel) =
(x.Number, x.Name)
let model1 = ConcreteModel1(modelArg1)
let model2 = ConcreteModel2(modelArg2)
getNumberAndName(model1)
//val it : int * string = (2, "Joe")
getNumberAndName(model2)
//val it : int * string = (3, "Jim")
推荐阅读
- android - Android - 渲染图像时性能下降
- excel - XlsxWriter:根据整个工作表中的单元格值插入特定图像
- openstack - 部署 kolla-ansible OpenStask wuth LDAP 集成
- azure - 使用 ARM 模板设置 X-Azure-FDID 标头
- ios - 我应该使用weak 让UICollectionViewCell 持有一个NSManagedObject,以避免干扰CoreData 内存管理吗?
- openshift - 从 RHEL 7.7 更改为 RHCOS
- angular - 清晰度自定义过滤器(角度)无法正常工作
- python - Seaborn 散点图无法让 hue_order 工作
- performance - Anaconda Jupyter Notebook 让我的笔记本电脑变慢并死机
- javascript - 如何在 vue 的 onMounted 方法中使用 vuex getter?