繁体   English   中英

Delphi到.NET + C#

[英]Delphi to .NET + C#

我已经很多时候一直是Delphi(D7)开发人员了,我一直在想.NET + C#的东西。 我的意思是关于不是“Delphi for .NET”或“Oxygene”技术/插件,而是干净的.NET / C#。

与德尔福有多大不同? 还有其他一些问题......

  • Mono / SharpDevelop(我应该知道的任何其他人吗?)和Non-Free Visual Studio一样能干吗?
  • 在部署方面,它是如何工作的? 大会+框架+可执行文件?
  • 框架(3.5最新?)的工作方式类似于Java世界的JVM,对吗? 它是否负责支持/利用多核技术或Windows特定优化等技术?
  • C#与Object Pascal有一些相似之处,不应该太难以适应,对吧?

谢谢。

重申第一点:您是否尝试过(免费) VIsual Studio Express Edition 对于很多事情,这是完全有能力的。 您只是没有那么多的帮助器/设计器,也没有插件支持(对于IDE扩展)。

第二个:排除一些讨厌的技巧 ,你不能从.NET创建一个纯本机可执行文件; 它在很大程度上依赖于本地机器上可用的框架。 程序集只是IL的一个包,可以包含(通常)在dll中,或者引导到加载程序集入口点的exe中; 但在这种情况下,exe只是一个简单的加载器加上常规程序集。

实际上,CLR更像是JVM; “框架”实际上只是BCL的等价物。 主要的MS框架+ CLR肯定有一些Windows特定的优化,但其他运行时/框架( compactmicroSilverlightMono )将有不同的优化。

重新多核 - 你有完整的线程支持(自己动手) - 但主要的自动多核支持(希望)将在.NET 4.0中使用“ 并行扩展 ”工作。

最后一点:确实应该非常熟悉。 实际上,如果你想进行一些比较,“ 反射器 ”(免费)可以采用编译的程序集,并在C#或delphi(或其他几个)中显示代码。

[更新问题]

IL =中级语言; .NET不会编译为本机CPU指令,而是编译为在运行时变为CPU指令的中间内容(在逐个方法的基础上编译为“及时”(JIT))。 这意味着JIT编译器可以为本地计算机优化相同的IL。 您可以使用NGen提前完成此操作。

CLR =公共语言运行时; 本质上是VM

BCL =基类库; 这组课程共享了我的许多应用程序

重新部署:首先,在客户端安装.NET框架;-p

之后 - 各种选择。 在最简单的级别,您可以将exe / etc复制到本地计算机上并运行。 例如,我使用“robocopy”将代码推送到Web服务器。

对于复杂客户端应用程序的完整本地安装,msi是一个选项(完整的VS IDE将帮助您完成此操作)。

对于简单的客户端,您可以使用ClickOnce - 它将应用程序打包到一个提供自我更新等功能的签名包中,并允许您声明所需的安全性(完全信任等)。 Express Edition允许您创作ClickOnce包。 ClickOnce甚至可以在用户无法安装应用程序的锁定客户端上使用,因为应用程序是隔离的并且是沙盒。

最后,您可以从网络共享中运行.NET应用程序,但存在一些安全隐患:“代码访问安全性”层不会给网络共享“完全信任”(尽管最近有一些更改,以便映射(F:etc)共享是可信的)。 因此,您需要在每个客户端使用CASPOL来信任代码。 ClickOnce会更容易;-p

作为Marc答案的补充,在从D6过渡到C#期间,这些是令人愉快的惊喜:

  • 更好的OOP,没有全局变量(“var MainForm:TMainForm”等)
  • 一切都是强类型的(通常,你可以没有指针类型)
  • 对于Windows窗体,“textual .dfm文件”(此处为YourForm.Designer.cs)实际上是C#代码,而不是自定义语言中的资源描述。 (尽管如此,这在WPF和XAML方面发生了巨大变化。)
  • 自定义值类型(“结构”)是可能的(例如,你可以有一个“复杂”类型,表现为整数或单个,生活在堆栈上)
  • 运算符重载

小小的不愉快的惊喜:

  • 没有类似Delphi的类引用(“xxx类”,例如“type TControlClass:TControl类”)
  • 没有索引属性(你可以用嵌套类伪造它)

嗯,这就是我现在所能想到的,几年之后。

Delphi是由编写C#的同一个人编写的,因此该语言的整体结构不会是最艰难的过渡。 您还必须记住,C#是C类,而Delphi是Pascal。 我在使用C#后尝试了Delphi,这是一个非常艰难的过渡。 首先没有垃圾收集,第二个像@Alan说全局变量很难。 你确实有C#的继承,但你不需要声明Form是TForm等的变量。第三,部署是一个巨大的痛苦。 使用.Net和GAC,您真的只需构建您的解决方案即可。 第四,这是对继续支持德尔福的更大担忧。 它现在是第三家公司。 我认为采用反对方式将Delphi转换为C#会更容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM