F“类型是否可能为”;继承;从一个C#类?

F“类型是否可能为”;继承;从一个C#类?,c#,f#,c#-to-f#,C#,F#,C# To F#,我曾经用过Haskell,但那是很久以前的事了,所以我决定看看F#。我用C、C++和C语言做了很多日常的开发。 我注意到,在将F#编译到dll时,可以在C#中将F#类型公开为类。但后来我开始思考。我有几个C#类,我想把它的逻辑放到F#中(试试看)。但是,许多现有的C#代码通过基类(非常基本)处理许多对象。是否可以使用C#中的基类作为F#类型的基类?或者F#只能从其他F#类型继承 这背后的原因是将基类作为主C#项目的一部分,而特定的DLL(类似于基于基类给定契约的插件)可以用F#编写。如果无法完成

我曾经用过Haskell,但那是很久以前的事了,所以我决定看看F#。我用C、C++和C语言做了很多日常的开发。 我注意到,在将F#编译到dll时,可以在C#中将F#类型公开为类。但后来我开始思考。我有几个C#类,我想把它的逻辑放到F#中(试试看)。但是,许多现有的C#代码通过基类(非常基本)处理许多对象。是否可以使用C#中的基类作为F#类型的基类?或者F#只能从其他F#类型继承

这背后的原因是将基类作为主C#项目的一部分,而特定的DLL(类似于基于基类给定契约的插件)可以用F#编写。如果无法完成,我将不得不添加另一个F#项目,该项目只包含感觉有点过于复杂的基类。

是的。这是可能的

type SomeClass =
    inherit SomeCSharpBase
以下是一些更详细的信息:

F#类可以从.NET类继承:

type FSharpClass() =
    inherit System.AccessViolationException()
其他一些F#类型(如记录、区分联合)不能从类继承,但它们可以实现接口:

type FSharpRecord =
    { d : System.IDisposable }
    interface System.IDisposable with
        member this.Dispose() = this.d.Dispose()

那容易吗?哇!C#类布局是否有任何限制?感觉它们(即F#和C#)编译到相同的底层语言应该非常简单,但人们永远不会知道。@inquam-阅读我提供的链接上的信息。我想我读过那个页面,但因为它没有提到从其他语言继承,我也没有找到任何关于它的好参考,所以我不确定。有点不错,不过就这么简单。谢谢@inquam:我认为您缺少了.NET的一个基本方面,即所有针对CLR的语言都会产生相同的输出(IL)。这意味着您通常可以假设,如果两种语言公开了CLR的一个功能,那么它们在该功能中也可以互操作。这可能解释了为什么文档中没有明确说明每种语言。@inquam我想我在想(像D Stanley)为什么你的第一步行动是在这里提问,而不是自己尝试?我猜这就是ildjarn所说的“没有任何研究成果”的意思。@Daniel:“不知道”不是寻找答案的主要驱动力吗?如果我知道从F#type和C#class创建的IL输出之间没有任何区别,我的问题将是多余的。但在我从微软那里读到的文本中,没有明确指出这是事实。事实上,它和以前一样简单,这只是一种奖励。但我们不能期望人们在被允许提问之前,随机假设和尝试一些事情,然后自己找出答案。这就是我看起来像一个至少在问问题的人。@Onorio Catenacci:这不是我第一次采取行动。我在微软读了很多文档,试图找到答案。但是没有找到任何回答我问题的答案。改进我的搜索,我发现我不是唯一一个问这个问题的人:)@inquam你的问题完全正确。有些信息在某些社区中可能过于含蓄。我希望我能发现,人们让你在评论中为自己辩护的时间比你最初的问题和提供的两个答案都长,这仍然令人惊讶。