F#immutable类型如何与C#接口 . 我刚刚开始学习F#,我想将它与我的一些C#代码混合使用,但我希望我的F#类是不可变的 .
假设我们在F#中创建了一个Vector类 . Vector.X和Vector.Y应该可以重新赋值,但只能返回一个新的Vector类 . 在C#中,这需要花费大量的工作量.WithX(float x)克隆现有对象并返回一个新对象 . 在F#中有一种简单的方法吗?
我一直在寻找一些时间,我似乎无法找到任何关于此的文档 . 所以任何帮助都会很棒 .
最后,如果我将这个类导入C#,它的界面会是什么样子? F#代码会限制我做像 Vector.X = 10
这样的愚蠢行为吗?
2 回答
无论是C#还是F#,这看起来都很相似 .
你说“在C#中它会需要腿部工作”,但我认为是cmon
这样对吗?
在C#和F#中,为了防止赋值给X属性,你创建了一个带有'getter'但没有'setter'的属性 .
我认为你把所有这些都变得比现在更难,或者我可能误解了你的要求 .
编辑
对于(我认为罕见的)有20个字段的情况,你可能想要改变它们的一小部分,我发现一个可爱的黑客很好地使用F#和C#可选参数 .
F#代码:
F#客户端代码:
C#客户端代码:
也就是说,可选参数是一种很好的方法,虽然C#可选参数有一些限制,但您可以以一种适用于C#的方式公开F#可选参数,如上所述 .
F#Record types有一种内置的方式来完成你所要求的:
如何与C#进行交互,我不确定(编辑:请参阅Brian的评论) .
Vector和任何.NET语言都是不可变的,因为X和Y实现为没有setter的getter .