.NET的用法会给我什么,我没有使用Win32 - 有时可能使用Google搜索可以重用的50-100行代码?
我正在开发Win32,因为它存在(> 15年).它直接且非常强大,虽然有时它需要比你期望的更多的呼叫,当然你需要跟踪手柄等.但是我们的(250.000 LOC)应用程序安装在不到1分钟内很少见有任何兼容性问题.
关于.NET与Win32(即Win32 vs .Net)的关于SO的几个讨论已经进行了 .但是他们没有回答这个问题.
答案很简单:更高层次的抽象和与幕后"真实"事物脱钩.这就是.NET可以在其他操作系统上实现的原因.
事实上,如果没有.NET,这一切都是可能的,但这是不切实际的.简短示例:.NET中的WCF为您提供了每个人都可以使用的第一类IPC和SOA框架.它内置功能.在win32中,您可以使用第三方库或其他任何方式获得相同的自编码.用户群很小,你没有那个大的社区支持你的问题,而且很难实现..NET Framework为您提供了开箱即用的功能.
对于大量应用程序,.NET将加快开发时间并使开发更便宜.
对于特殊类型的应用,情况恰恰相反.EG(几乎)不可能用.NET开发实时应用程序,因为级别2上的GC会冻结所有线程.
补充:
.NET framework 4.5包含一个增强的垃圾收集器.它为服务器垃圾收集器启用多线程后台垃圾回收(使用app.config中的
不幸的是Mono垃圾收集器并不是那么先进,所以Mono的基本声明仍然是正确的.
恕我直言,只有那些已经开发Win32超过15年的人可以称之为简单而强大.如果您愿意自己编写全部250,000行而不是使用组件,那么您的应用程序将很容易安装.我不确定这种权衡是否值得.
.NET给你的是更快的开发,出于各种各样的原因.更高的抽象,更好的组件,没有指针问题,更少需要管理自己的内存或句柄.如果你已经开发了Win32 15年,也许你不需要任何这些.你有没有聘请新的初级程序员?我确信他们比Win32更快地学习.NET.在你甚至可以说"Hello world"之前,你需要在Win32中学到很多东西.
在使用ASP.NET/ASP.NET MVC切换到Web开发之前,我已经用C++开发了大约8年的游戏.从我的角度来看,这些是使用.NET而不是本机C++代码时最重要的优势:
非常好的IDE工具.Resharper可以比VisualAssist做得更多
没有更多的无效/空指针错误或泄漏的内存问题
具有比Win32更好的API的可靠运行时
很多优秀的开源.NET库,比我能找到的C++更多(尽管没有C#Boost)
感谢Mono,将软件移植到另一个平台比使用C++更容易
便于使用.并且与.NET框架的其余部分(非Win32相关部分)易于互操作.
.NET没有什么神奇的东西,它只是一大堆用于轻松完成常见任务的预定义类.其中许多任务都是"创建窗口"或其他Win32功能.
至于Win32"简单而强大",我不这么认为.
这是一个很好的例子:程序员将需要的最基本的功能之一:检索与刚刚发生的错误相关的错误消息:
http://msdn.microsoft.com/en-us/library/ms679351%28VS.85%29.aspx
7个参数
读取两个表以了解参数
安全评论要考虑在内
必须调用特殊的特定函数(LocalFree)以释放系统分配的缓冲区.
只是为了实现这个简单的功能?这是"直截了当"吗?
Win32 API是最糟糕的设计,最复杂和最难以使用(正确,至少)的API之一.它始终如一地做到的唯一事情是使简单,直观的使用错误,并需要大量的步法来实现正确性.
但是,当然,任何花了十年时间使用API的人都已经遇到过这些问题并且已经习惯了.对你来说可能没问题.甚至更好,因为你已经拥有了你的应用程序,你也可以坚持下去.没有理由把它扔掉并在.NET中重新开始
但是,如果你今天从头开始一个项目,那么
学习曲线在.NET中会更友好(但同样,如果你已经超过了学习曲线,那就不那么重要了)
在.NET中会减少错误的范围(以"错误"方式调用函数要困难得多,即使你这样做,也会发生更少的坏事)
找到新的程序员加入你的团队会更容易
对于像C#这样的语言,大多数人的工作效率要高于C或C++..NET提供的主要功能之一是能够使用.NET语言.与此相比,班级图书馆可以被认为是锦上添花.
两个字总结:
垃圾收集.