【发布时间】:2017-09-29 20:39:43
【问题描述】:
我正在尝试将我很久以前编写的 C# 应用程序重写为 F#,但我遇到了一些麻烦,因为这是我第一次尝试在 F# 中编写有意义的东西
在我的 C# 软件中,我有以下类“Buildings”,它是我需要在应用程序的其余部分中使用的父类:
public class Buildings()
{
Buildings()
{
Spectre = new Spectres(this);
}
public double Height;
}
还有另一个名为“Spectres”的类,它只在建筑物中使用:
public class Spectres(Buildings prntBuilding)
{
Spectres()
{
_prntBuilding = prntBuilding;
}
private Buildings _prntBuilding;
public double doSomethingToheight()
{
return _prntBuilding.Height * 2.0;
}
}
我的问题是:我如何在 F# 中做到这一点,在 F# 中这种父子关系是否有替代方案?
编辑:我找到了解决方案
type Buildings() as self =
member this.Hn = 1.0 with get, set
member val Spectre = new Spectres(self) with get, set
and Spectres(prntBuinding : Buildings) =
let DoSomethingToHeight = prntBuilding.Hn * 2.0
【问题讨论】:
-
在 F# 中,数据通常只是普通数据,您可以在这里使用记录类型。如果您尝试编写惯用的 F#,请考虑不存储对父级的引用。然后,您可能会在接下来需要对数据做一些事情的地方遇到困难,但这将是另一个问题的问题,并且可能会有解决它的模式。