我想在C#和F#中编写一些东西。我有部分类,我想在其中一些中定义F#方法。我得到的问题是,部分类不能跨越2个DLL。有没有办法合并它们?我更喜欢免费的解决方案,并且能够在正常构建中自动完成。
答案 0 :(得分:6)
你不能用不同的语言写一个班级的不同部分。
你想做什么?
您可以在单独的F#库中公开方法,并在C#中从类中调用它们 然后,您可以使用ILMerge合并两个程序集。
答案 1 :(得分:5)
我已经听过这样的请求,所以似乎有更多人愿意这样做。但是,如前所述,这是不可能的。您可以使用ILMerge合并多个程序集(具有不同的类),但不可能用不同的语言编写类的不同部分。您可以得到的唯一答案是您需要以不同方式构建代码。有几种选择:
在任何情况下,您都需要以某种方式解除功能(这是技术要求,我相信它也有助于使您的代码更具可读性)。
说明跨多个程序集的部分类无法工作的原因:
// C# part
partial class Foo {
private int csharpField;
int Bar() { return FSharpMethod(); }
}
// F# part
type Foo =
member x.FSharpMethod() = x.csharpField
在此示例中,C#无法编译代码,因为它不知道FSharpMethod
是否存在以及它的类型是什么。 F#编译器也无法编译代码,因为它不知道csharpField
的类型是什么(以及它是否存在)。
当然,这只是一个技术问题的一个例子,但是会有很多这样的问题 - 如果你想支持这个问题,很容易想象会出现很多其他问题(似乎这两个编译器需要它们)要注意另一个人的内部情况。)