在Delphi 8 for .NET中创建一个WinForms是轻而易举的。现有的Delphi开发者们告诉我们:“这很好,但是我们能用它来为我们的VCL代码做什么呢?这些代码都是以前创建的,我们的业务都依赖于这些代码。”
为了让我们的客户更加满意,并且让.NET平台对于现有的Delphi开发者来说更加有吸引力,需要有一些东西来填补现存的Win32开发与新的.NET开发之间的鸿沟。它需要像.NET框架本身一样是一个纯粹的.NET,它还需要提供一个与现有Win32 VCL结构之间的高度兼容性。为了吸引现有的VCL开发者, Delphi for .NET需要的是一个在.NET平台上的实现的VCL。
VCL架构是与微软的WinForms架构对等的,而VCL for .NET是VCL架构的继续与演进。WinForms与VCL for .NET都建立在对Win32 API的调用之上,所以有相似的平台约束与相似的执行特征。对于VCL而言,甚至还有潜在的机会能比WinForms运行得更出色,这是因为VCL实现了针对笔,刷子,以及设备上下文的句柄共享,而WinForms没有。微调与探索这些性能方面的机会是Delphi开发小组持续的任务,就像微调WinFrorms的性能与.NET的性能是微软持续的任务一样。
对于应用程序代码来说,从Win32 VCL移植到VCL for .NET是相当简单的,但对于那些与Win32 API的关系更加紧密的组件来说,将可能需要更多的一点工作。这与移植到CLX的情况很相似。然而,Delphi开发者会发现,从Win32 VCL移植到VCL for .NET所需的努力要比从Win32 VCL移植到CLX所需的努力要少。VCL for .NET在很大程度上改变了执行环境,但实现了与Win32 VCL几乎相似的消息处理,异常处理,以及Win32 API支持。而CLX为了在Linux平台上运行不得不牺牲消息处理与Win32 API支持。
VCL for .NET的代码移植并不是单向的。为VCL for .NET 编写的应用程序代码也能在一个合理的范围内反过来被移植到Win32 VCL上。再一次地,要维护跨平台的同一份源代码,那些离Win32调用很近的操作代码(如定制控件),要比用常规Delphi语法编写的应用程序业务逻辑,会更困难一些。(常规的意思是避免不确定的类型转换与指针运算。)
在VCL for .NET窗体上能放置WinForms控件。Delphi开发者编写的VCL for .NET应用程序能同时使用VCL for .NET组件与控件,就像使用任何WinForms组件与控件一样。
也许比实际的源代码更重要的是开发者的开发技能。对VCL熟悉的开发者立即就能对VCL for .NET熟悉起来。在Win32 VCL中你怎样创建一个应用程序,或者创建一个定制组件,或创建一条定制的消息处理,在VCL for .NET中你就怎样创建,两者的方式是完全一样的。VCL for .NET让熟练的Delphi开发者能在.NET平台上立即变得富有生产力,而避免花去典型的三到六个月的额外时间来为一个不同的应用框架结构对 开发者进行再培训。
Delphi语言是独立于VCL的
VCL for .NET依赖于Delphi语言的一些特性,但Delphi语言本身并不需要VCL。你能直接用Delphi语法编写WinForms应用程序,而不必将VCL for .NET拖入你的应用程序里。你也能用你熟悉的Delphi RTL工具函数与类来编写WinForms应用程序,这样的好处就是,例如,你不必花时间来找在.NET中与Delphi的IntToStr()等价的函数是什么。
改变很多时候会引起惊慌。所以很高兴从微软处得知WinForms应用程序可以继续在长角及其后续版本上使用。VCL for .NET是建立在与WinForms相同的基础上的,所以VCL for .NET应用程序应该也可以继续在长角及其后续版本上运行。VCL已经经受住了几次平台移植的考验(从Win16到Win32,从Win32到Linux,现在又从Win32到.NET),这比WinForms还多,所以有理由认为VCL fot .NET比WinForms更容易适应在长角操作系统中会发生的改变。
所有这些加起来使得VCL for .NET成为一个比WinForms架构更强大的同类体系。对于现存的VCL应用程序而言,比起为WinForm而重写代码这种方式,VCL for .NET具有更长的可用的生命期,而不是作为一个临时的单向过渡方案,而且还有更好的投资回报(ROI)。
为什么要改写你的应用程序?把你现有的VCL应用程序移植到VCL for .NET可以以更少的努力获得同样的结果。即使VCL for .NET与WinForms在同一条船上翻掉,VCL for .NET也意味着比WinForms有更好的投资回报。