F#探险之旅(八):使用F#开发Windows应用程序 - 面向对象网 f# 学习 对象 - 面向对象技术开发

面向对象技术开发

会员投稿 投稿指南 站长资讯通告:
您的位置: 首页 > OOP语言 > F# > 正文

F#探险之旅(八):使用F#开发Windows应用程序

来源: www.bianceng.cn 阅读:

我们身在何处?

前面写过的随笔主要关注的是F#与FP的基本概念,对UI涉及很少。我们知道,没有UI就没法与用户进行交互,所以写两篇随笔来了解一下这方面的内容。本文主要关注的是如何使用F#开发WinForm应用程序,后面还会介绍如何使用F#开发ASP.NET应用程序。

不过说真的,我对WinForm开发了解不多,所以如果有不妥之处,欢迎您的指正。

WinForm中的基础类型是System.Windows.Forms.Form类,通过它我们可以创建一个窗体,在窗体上我们可以根据需要进行绘制。绘制的时候我们可以选择使用.NET提供的API手工“画”出一些图形,比如像素着色、直线、圆等等,也可以使用.NET里面的一些标准控件,比如文本框、按钮等等。接下来基于Windows应用的事件驱动的特性,通过事件(Event)和事件处理函数(Event Handler)使用户可与程序进行交互。另外,如果标准控件或窗体不能满足需要,我们还可以对其进行扩展,创建用户控件和自定义控件。

下面就来看看如何实现这些过程。

分析

在使用C#开发的WinForm应用中可以看到,我们创建的新窗体类继承了System.Windows.Forms.Form类,在程序的入口函数Main中,有一行关键的代码:

C# Code

Application.Run(new MainForm());

也就是说创建Form类的一个实例,传给Application.Run方法,程序由此开始执行。使用C#开发的一大优势在于VS IDE提供的窗体设计器,这样就可以在设计时设置窗体和控件的属性,VS会为我们生成代码,从而大大提高了开发效率。

遗憾的是,VS还没有为F#提供这样的设计时支持,也就是说我们必须手工编写所有的代码,那如果界面很复杂,不得累死啊?也不尽然。首先考虑下面的简化了的三层架构示意图:

\

这里并不是说程序一定要分为三层,或者说三个Project,而是说从逻辑上大体可以这样来看。大部分情况下,与设计器相关的只有UI层(不要忘了其它地方VS也可以生成代码),如果UI相当简单,完全手工编写这些代码也没什么大问题,如果UI相当复杂,就得考虑别的办法了。

F#基于.NET平台,在这一点上,它与C#、VB.NET是平等的,这一次我们又可以获益于它的互操作性(Interoperability)了!既然C#类库可被F#调用,如果我们把窗体类放在一个类库内不就可以了吗?这样一方面我们可以利用VS的设计时支持,另一方面又可利用F#带来的好处,岂不妙哉?退一步讲,我们也没必要非得使用F#开发UI部分,完全可以使用C#开发UI,其余部分使用F#开发,这也是不错的方法。

总结上面的分析,可以得到这样的结论:在开发WinForm应用时使用F#,如果UI非常简单(比如画出一条数学曲线或者只有两三个控件的小工具等),我们完全可以手工编写所有代码;如果UI比较复杂,我们使用C#开发UI类库供F#调用,也可以只采用F#编写UI之外部分的代码。

下面我们来讨论下这三种方法的具体实现。

Tags:
相关文章列表: