【发布时间】:2010-10-08 01:50:09
【问题描述】:
我听说过 F#,微软现在有一个人在 redmond 的某个地方写博客和编码。你真的可以用 F# 编写 GUI 代码吗(我很想看到一个例子,比如向表单添加一个按钮并订阅 onclick 事件)
F# 是否拥有对所有 .Net 的完全访问权限?
我真的很好奇,我知道我可以用谷歌搜索,但我很想听听真正使用该语言的人的意见。
【问题讨论】:
标签: .net windows user-interface f#
我听说过 F#,微软现在有一个人在 redmond 的某个地方写博客和编码。你真的可以用 F# 编写 GUI 代码吗(我很想看到一个例子,比如向表单添加一个按钮并订阅 onclick 事件)
F# 是否拥有对所有 .Net 的完全访问权限?
我真的很好奇,我知道我可以用谷歌搜索,但我很想听听真正使用该语言的人的意见。
【问题讨论】:
标签: .net windows user-interface f#
是的,您当然可以编写 WinForms 应用程序 - 尽管您不会覆盖 OnClick 方法,但您会订阅 Click 事件。
是的,F# 可以完全访问 .NET,但如果您使用大量可变类型,您将不会获得非常惯用的函数式代码。
Tomáš Petříček's F# web site 有他书中的示例源代码(免责声明:我也参与了这本书,所以我显然有偏见)其中有 WinForms 示例。
【讨论】:
我强烈推荐 Scott Hanselman 的 this excellent post,它指向一些 F# 资源,包括示例和演示文稿。
【讨论】:
但正如 Jon Skeet 所说,Tomas 有一些有趣的例子(尤其是过滤/管道事件),这表明我怀疑可能是一个很好的交叉点,即用设计师设计你的 C# GUI,然后编写大脑在 F# 中,通过事件将一个连接到另一个。
这是我认为非常好的方法。在没有 WinForms 设计器的情况下设计复杂的 GUI 有点烦人(尽管 WPF 中的区别并不大 - F# 不支持 WPF 设计器,但你不会在那里松散那么多东西)。
无论如何,请继续关注更多示例 :-)。使用声明性事件处理(Event.filter、Event.map 和朋友)非常好,但在某些情况下,它并不是您想要的。我只是在写一章,我认为 F# 为您提供了一些非常棒的方式来处理 GUI——源代码将在 book web site 上免费提供,我也希望为我的博客写一些简短的介绍一旦这本书完成了。
【讨论】:
我实际上并没有使用过 F#,只是阅读了规范。这可能对 WinForms 开发非常有用,但我对此的直接反应是“这并不重要”。只要您使用符合 CLR 的编译器,您就应该能够将 F# 程序集与其他用 C#/IronPython/etc 编写的程序集混合使用。
是的,F# 可以使用 .NET Framework,而 F# 程序集可以被其他 .NET 程序集使用。
我的建议是在 F# 中编写您的函数库,然后使用您喜欢的任何 .NET 语言来编写客户端应用程序。
【讨论】:
您可以从 F# 编写 GUI 代码,但我不确定您是否愿意。如果您是那种在记事本中编写 C# GUI 的人,那么它可能不会打扰您。就我个人而言,我更喜欢设计师,而且没有一个用于 F#,据我了解,也不会有一个 - 这可能说明了 F# 的预期用途。
但正如 Jon Skeet 所说,Tomas 有一些有趣的例子(尤其是过滤/管道事件),这表明我怀疑可能是一个很好的交叉点,即用设计师设计你的 C# GUI,然后编写大脑在 F# 中,通过事件将一个连接到另一个。
【讨论】: