【问题标题】:Is F# a usable language for .net windows developmentF# 是 .net windows 开发的可用语言吗
【发布时间】:2010-10-08 01:50:09
【问题描述】:

我听说过 F#,微软现在有一个人在 redmond 的某个地方写博客和编码。你真的可以用 F# 编写 GUI 代码吗(我很想看到一个例子,比如向表单添加一个按钮并订阅 onclick 事件)

F# 是否拥有对所有 .Net 的完全访问权限?

我真的很好奇,我知道我可以用谷歌搜索,但我很想听听真正使用该语言的人的意见。

【问题讨论】:

    标签: .net windows user-interface f#


    【解决方案1】:

    是的,您当然可以编写 WinForms 应用程序 - 尽管您不会覆盖 OnClick 方法,但您会订阅 Click 事件。

    是的,F# 可以完全访问 .NET,但如果您使用大量可变类型,您将不会获得非常惯用的函数式代码。

    Tomáš Petříček's F# web site 有他书中的示例源代码(免责声明:我也参与了这本书,所以我显然有偏见)其中有 WinForms 示例。

    【讨论】:

    • 感谢 Jon,这是一本关于 F# 应用程序的非常好的读物,实际上是一般函数式编程的不错入门读物。我特别喜欢与 C# 的比较。干杯伙伴;)
    • Jon Skeet 不仅声名鹊起,他还参与了一本书。先生,你很紧张。我向你致敬。
    【解决方案2】:

    我强烈推荐 Scott Hanselmanthis excellent post,它指向一些 F# 资源,包括示例和演示文稿。

    【讨论】:

      【解决方案3】:

      但正如 Jon Skeet 所说,Tomas 有一些有趣的例子(尤其是过滤/管道事件),这表明我怀疑可能是一个很好的交叉点,即用设计师设计你的 C# GUI,然后编写大脑在 F# 中,通过事件将一个连接到另一个。

      这是我认为非常好的方法。在没有 WinForms 设计器的情况下设计复杂的 GUI 有点烦人(尽管 WPF 中的区别并不大 - F# 不支持 WPF 设计器,但你不会在那里松散那么多东西)。

      无论如何,请继续关注更多示例 :-)。使用声明性事件处理(Event.filter、Event.map 和朋友)非常好,但在某些情况下,它并不是您想要的。我只是在写一章,我认为 F# 为您提供了一些非常棒的方式来处理 GUI——源代码将在 book web site 上免费提供,我也希望为我的博客写一些简短的介绍一旦这本书完成了。

      【讨论】:

      • 感谢您的输入托马斯。我一直在 MSDN 上阅读您的博客。没想到你也和 Jon Skeet 有关系。外面的小世界……
      【解决方案4】:

      我实际上并没有使用过 F#,只是阅读了规范。这可能对 WinForms 开发非常有用,但我对此的直接反应是“这并不重要”。只要您使用符合 CLR 的编译器,您就应该能够将 F# 程序集与其他用 C#/IronPython/etc 编写的程序集混合使用。

      是的,F# 可以使用 .NET Framework,而 F# 程序集可以被其他 .NET 程序集使用。

      我的建议是在 F# 中编写您的函数库,然后使用您喜欢的任何 .NET 语言来编写客户端应用程序。

      【讨论】:

      • 这就是我的想法,但是如果你不能使用它来做你需要的一切,那么它的用途是什么。另一个问题是编译器目前不支持在同一个程序集中使用多种语言,因此性能可能会受到影响,具体取决于您在代码中执行的操作。
      • @Spence,如果你说的是真的,那就只有一种语言了。但是不同的语言有不同的目标、用途和优势。你肯定不会很快发现我用 SQL 编写操作系统。
      【解决方案5】:

      您可以从 F# 编写 GUI 代码,但我不确定您是否愿意。如果您是那种在记事本中编写 C# GUI 的人,那么它可能不会打扰您。就我个人而言,我更喜欢设计师,而且没有一个用于 F#,据我了解,也不会有一个 - 这可能说明了 F# 的预期用途。

      但正如 Jon Skeet 所说,Tomas 有一些有趣的例子(尤其是过滤/管道事件),这表明我怀疑可能是一个很好的交叉点,即用设计师设计你的 C# GUI,然后编写大脑在 F# 中,通过事件将一个连接到另一个。

      【讨论】:

      • GUI 设计师是 C# 设计如此令人愉快的全部原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 2022-11-22
      • 1970-01-01
      相关资源
      最近更新 更多