Delphi开发人员转向C#

13

我是一个 Delphiholic,已经有一段时间了。最近我在考虑学习一些 C#,但我有点“害怕未知的东西”。我已经尝试编写了一些简单的应用程序来测试 C#,不得不承认我很喜欢它,但我真的不喜欢这个 IDE... 鉴于此,我希望其他走过这条路的人能够回答以下问题:

作为 Delphi 开发者,从 Delphi 语言到 C# 语言(基本上是指实用函数、流等方面),主要的基本变化是什么?我习惯于将 "System、Classes、Windows" 添加到 uses 中,而不是使用 "use System.XXX.YYY.ZZZ"。我试图在脑海中建立一个从 Delphi 到 C# 的部分等价,以便我能看清 Delphi 和 C# 两者之间的联系。

我希望问题已经相当清楚了,如果不清楚,请不要客气,告诉我,我会尽力澄清 :-)

2个回答

26

我在软件开发中都广泛使用。

.NET 可以更快地开发服务器应用程序(Web 应用程序、Web 服务、Windows 服务)。

Delphi 可以更快地开发业务应用程序(纯 Windows UI)。

在两种环境下都需要付出努力来开发吸引人的应用。

以下是您需要知道的一些事情:

  • 学习 .NET 框架将需要大量时间:它非常庞大,但包含了许多小工具(一些宝石实际上被隐藏得非常好)。
  • 不要同时追随所有新趋势:泛型、lambda、LINQ,每一个都很棒,但同时掌握它们只适合少数人。
  • 对于 Web 应用程序,请跳过 WebForms,而学习 ASP.NET MVVC(是的,Ruby 的人们一直是正确的);还要学习 HTML5 和 JavaScript。
  • 对于吸引人的 Windows 应用程序,请学习 WPF,但准备好面临陡峭的学习曲线(设计师和框架都是完全不同的)。
  • 不要做太过吸引人的 UI:这会花费你不成比例的时间,而你的用户正在等待功能。
  • 市场自 Delphi 1 版以来一直在批判 Delphi,现在同样抨击 SilverLight
  • 跳过 WinForms;如果你需要类似 WinForms 的东西,那么 Delphi 的生产力要高得多(特别是如果你有一个现有的 Delphi VCL 代码库)。
  • WPF 和 VCL 或 WinForms 一样友好线程(也就是说,这三者都不友好线程)。
  • 不要将 Delphi 的内容重写为 .NET(或其他任何从平台 A 到平台 B 的 1:1 重写):这是浪费你时间。
  • 多线程和同步是所有开发环境中的痛点。这种痛点不在于常规内容(.NET 4框架中的Concurrent Collections以及Delphi OmniThreadLibrary有所帮助),而是在于正确处理最终细节和异常情况时的困难。
  • 垃圾收集并不意味着您不会泄漏内存:它只是意味着当您的应用程序终止时您不会出现泄漏,但在运行时泄漏更难检测(哇,我希望我能在.NET上使用FastMM内存监视器)。

  • +1 我非常喜欢你的答案,谢谢,非常直接明了。关于内存泄漏问题,我通常会关注我创建的所有实例(我说的是使用Delphi进行开发),我从不尝试进行一对一的重写,因为正如你所说,这是完全浪费时间的。然而,我会使用现有的数据库及其逻辑,并使用C#应用程序访问它。我发现ASP页面有点慢--难道只有我这样觉得吗? - user497849
    经典 ASP 页面较慢,因为脚本引擎需要每次解释每个页面。ASP.NET 页面通常很快,因为编译实例被保存在缓存中。它们可能会变慢,因为有两个原因:未在缓存中的页面(第一次编译、缓存过期、重新初始化 ASP.NET 工作进程等),或逻辑层较慢(这时在 WPF 应用程序中也会很慢)。 - Jeroen Wiert Pluimers
    @gbrandt:感谢您的编辑;看来我的词盲并不像有时候那么严重 :-) - Jeroen Wiert Pluimers
    感谢大家在我的问题上分享知识,我真的希望其他人也学到了一些东西,我更喜欢Jeroen的答案。干杯! - user497849
    在Delphi中编写服务器应用程序可以非常快速和简单,这要归功于基于接口的服务。请参见http://blog.synopse.info/post/2012/04/20/WCF,-mORMot-and-Event-Sourcing。我已经开发了多年的SOA WCF解决方案,仍然更喜欢mORMot的约定优于配置。.exe.config可能很难维护,而且微软在.net 4.5中破坏了默认设置,这破坏了我们所有客户端...我不喜欢WCF这样的黑盒子...但这只是我自己实验的观点。 - Arnaud Bouchez

    15
    "主要的基本改变"是.NET库面向对象化。例如,全局字符串函数不再分散在System、SysUtils、StringUtils等中,而是都作为String类的静态方法统一管理;全局路径操作函数则作为Path类或File类的静态方法;TextFile/AssignFile/Rewrite对应创建StreamReader(如果文件很小,也可以直接调用静态方法File.ReadAllLinesReadAllText)。大部分功能探索一下就能发现,但有些功能没有,例如.NET中没有IncludeTrailingPathDelimiter方法(虽然通常不需要,Path.Combine更好用)。"

    我同意跳过WinForms的建议。如果你使用过Delphi VCL,WinForms会很熟悉,但却令人沮丧、恼火并且非常不够用。他们从VCL中借鉴了基本的想法,但从未花费精力使其更加深入或易用。没有TAction/TActionList的等效物,Dock属性(相当于Delphi的Align)喜欢将控件隐藏在彼此后面,直到你用“Bring to Front”/“Send to Back”进行打扰,提示需要在你的表单上添加一个额外的组件,只有极少量的控件,这只是我现在能想起来的一点。花些时间学习WPF;它拥有VCL的所有丰富性,并且还比之更加强大,让你花费更少的时间去敲头撞墙。

    IDE需要一些适应,但我比Delphi更喜欢它。你必须学习一组不同的按键组合,但那没什么大不了的。IDE更加响应迅速(没有“后台”编译期间出现的卡死情况)。它还有一些很棒的插件——在你使用了ReSharper一段时间后,你将不会很想念Delphi IDE。


    非常好的回答,谢谢。TActionList/TAction不是我真正使用的东西...我看了一下WPF,它看起来非常有前途,我相信我会用C#编写一个Web应用程序。关于基本的东西,我认为你已经涵盖了我想知道的内容(但我想看看其他人是否有什么要补充的),你说IDE比Delphi的更牛逼,你能详细介绍一下吗?起初我没有看到任何特别之处,相反,但我没有太多的经验(2-6小时,然后因为BSOD而退出...) - user497849

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接