使用X# 进行开发,你有三种开发环境的选择:
1. 使用任何您喜欢的编辑器(ahem, VI),然后使用命令行编译器进行编译。这是我留给读者自行探索的选项。
2. XIDE,X# 的集成开发环境,它可以和X# 一起下载。XIDE 是一个完美维护的环境,与Visual FoxPro 的IDE 有很多共同点。它是用X# 编写的,因此它也作为一个生动的例子,说明该语言在正确的地方可以做什么。
3. VisualStudio,专业版(付费版本)或社区版(免费版本)。VisualStudio 的最大有点是,全世界许多开发人员都在使用它,因此它得到了开发人员和社区的大力支持。它具有很多功能,但是以我的经验来说,在性能上还是有点差强人意,这是一种资源浪费。你可以认为它是一只猪或是一条狗——如果您愿意的话,它是一个热狗(如果您看到这个笑话时笑了,请给我发电子邮件,下次我们见面时我会和您喝一杯)。
Visual Studio Professional2017 是我在此时使用的开发环境。如果您不熟悉Visual Studio ,那么在X# 帮助文件中您可以找到如何在Visual Studio 中使用X#。
用Visual Studio 的话说,“解决方案”是应用程序的主要架构。它是主要项目单位的项目集合。您最好将业务对象放在自己的项目中,并将用户界面元素放在另一个独立的项目中,因为这样,您就可以在多个解决方案中将业务对象分离并重新使用(即“引用”)。
要从头创建新的解决方案,请从菜单“文件-新建-项目”开始。该对话框使您指定包含新项目的解决方案的名称,并为您创建解决方案(如果要创建一个新项目并将其作为已有解决方案的一部分,那么您必须打开该解决方案,然后选择菜单“文件-添加-新建项目”。参看图6)。
因为我们已经安装了 X#(您可以直接从 http://www.xsharp.info下载安装,这个过程留给读者自己进行练习),因此我们可以在这里使用 Xsharp 模板。
项目模板能为您做什么?
项目模板设置针对项目类型进行了调整的项目的某些属性(参见图4)。
图4:由项目模板设置的项目属性
它可能还包括该类型项目通常使用的代码文件和其他资源。例如,请注意基于Class Library FoxPro Dialect模板创建项目后是如何将方言自动设置为 FoxPro 的。基于此模板的项目还包含一个基准的PRG库,以帮助我们入门(图5),但是,它们也可以包含多达一个完整的应用程序框架。
图5:项目模板中的开始代码
Visual Studio 允许开发人员创建自己的项目模板,就像Word 和Excel 允许您为文档和电子表格创建自己的模板一样。
作为FoxPro 开发人员,图3中显示了三个我们特别感兴趣的项目模板:
· Class Library FoxPro Dialect:这种项目将在General 属性中预先设置FoxPro 方言(参看图4),并包括准系统入门类定义。
· FoxPro Console Application:它也将方言设置为FoxPro,还将“Output Type”设置为“Console Application”。这使我们可以使用正确的退出代码在FoxPro 方言中创建命令行实用程序,这对于Visual FoxPro 来说是一件很困难的事(译者注:针对创建控制台应用程序?)。命令行应用程序可以与诸如持续集成工具Jenkins 之类的开发管道一起很好的工作。
· Windows Forms (或 WPF) Application:这些并不是FoxPro 特有的,但我们将探索使用它们为任务列表创建用户界面
模板中入门类有趣的地方是,它使用的语法看起来并不像 FoxPro 的。X# 开发团队现在已经对VFP 语法有了更深入的了解,但是我怀疑这个模板是在正式支持之前编写的。我们稍后会在转换过程中使用更新后的语法。
需要特别注意的是 Visual FoxPro Compatibility/Inherit from Custom Class 设置。如果您希望代码像在VFP 中那样工作,那么你就要将其设置为True。除此之外,这将导致X# 触发一个Init() 方法(以前X# 使用Constructor())并为我们的“属性”创建虚拟的_access 和_assign 方法。
为便于阅读,我们将要迁移的类的代码放在了附录A中。您可以从https://github.com/eselje/XToDos存储库中下载 FoxPro 源代码,并从 https://github.com/eselje/XToDos下载最终的 X# 解决方案。
FoxPro 类库包含两个类定义:
· ToDo,用于管理单个任务
· ToDos,用于管理ToDo 对象的集合
尽管我可以用VCX(可视类库)编写,但是我还是选择直接编写代码,因为这可以更容易的说明如何向X#过渡,X#中是没有“可视类”这样的概念的。所有的代码均以文本形式完成,这在源代码控制方面是一个巨大的优势,因为不需要在VFP中实现序列化二进制文件所需的多种解决方法。正如我们在讨论表单、菜单和自定义控件时所看到的那样,Visual Studio 有一个“视觉”元素,但是源代码本身就是文本。
免责声明:您在本示例代码中发现的任何不完善之处或存疑的设计决策都可能是有目的的包含在其中以说明某些问题。这种做法可能是个错误。谁知道呢?