我想用 C# 和 F# 编写一些东西。我有部分类,我想在其中的一些中定义 F# 方法。我得到一个部分类不能跨越 2 个 DLL 的问题。有没有办法可以合并它们?我更喜欢免费的解决方案,并且能够在正常构建中自动完成。
user34537
问问题
420 次
2 回答
6
您不能用不同的语言编写课程的不同部分。
你想做什么?
您可以在单独的 F# 库中公开方法并从 C# 中的类调用它们。
然后,您可以使用 ILMerge 合并这两个程序集。
于 2010-03-03T21:00:18.450 回答
5
我已经听到了这样的要求,所以似乎有更多的人愿意这样做。但是,正如已经说过的,这是不可能的。您可以使用 ILMerge 合并多个程序集(具有不同的类),但不可能用不同的语言编写类的不同部分。您能得到的唯一答案是您需要以不同的方式构建代码。有几种选择:
- 声明一个 F# 模块,其中包含您想要在 F# 中执行的部分的功能
- 在 F# 中使用成员声明类型,然后在 C# 中使用这些类
- 在 C#(或 F#)中声明一个基类并创建一个继承类,以添加其他语言的其余功能。
在任何情况下,您都需要以某种方式解耦功能(这是技术要求,我相信这也有助于使您的代码更具可读性)。
演示为什么跨多个程序集的部分类不能工作:
// 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
(以及它是否存在)。
当然,这只是一个技术问题的一个例子,但其中会有很多——你可以很容易地想象如果你想支持这个问题会出现许多其他问题(而且看起来这两个编译器需要注意对方的内部结构)。
于 2010-03-03T21:19:58.297 回答