与新手分享为什么要学习.NET
相信很多朋友和我一样,在刚开始学习.NET,或者还未开始学习之前都有这样一个疑问,在Windows下做开发,学习.NET真的有必要吗?特别是旧的开发技术如VC/MFC, WIN32, COM等技术仍然会存在很长的一段时间,耗费大量精力去学习一套新技术是否值得呢?我刚开始也有这样的疑问,但经过了一段时间对.NET的了解和学习之前,我个人觉得是肯定的,只不过是学习时间的迟早问题而以,本文作为个人学习.NET的第一篇笔记,也希望对新手能作一个参考,欢迎大家帮忙纠错啊,呵呵!为什么微软设计和发布 .NET? 相信大多数人都会认为微软推出 .NET 是为了与 JAVA 正面竞争,不可否认这是原因之一,但是如果你回顾 Windows 下微软技术的发展历史,你就会发现,几经岁月的微软技术已经显得越来越壅肿 , 无论在易用性、开发效率和安全性上都积累了诸多诟病,很多技术都是在需求的驱动下诞生的,都缺乏整体规划,微软迫切地需要对其所有的技术进行一次重构,现在就让我们一起回顾一下微软技术的发展历史,来认识 .NET 技术诞生的必要性:
在 .NET 之前, Windows 平台下的编程技术主要是 Win32 SDK, ASP,COM, DCOM, ADO 等技术,这些技术在后来也有了一个统一的名字叫 Windows DNA ,和 .NET 是一系列技术的集合一样, Windows DNA 是这些一系列技术的统称,为了加快软件开发,微软为 C++ 程序员提供了 VC/MFC 开发工具,为 Basic 程序员 提供了 VB 等,由于语言本身存在的先天差异 ( 例如数据类型不相同,内存管理也不同等等 ) ,微软没有办法做到 VB 和 VC 程序引用同一套类库,所以微软为每一种语言都提供其单独的 Runtime 类库、单独的数据库类,不同的 GUI 构建方式等。由于类库的大部分功能都基本相同,因此,为不同的语言设计和维护不同的类库是一件很没有效率的事情。(后注: .NET 是所有 的 .NET 语言都引用同一套 .NET Framework )
值得一提的是, Borland 公司的 C++ Builder 与 Delphi 共同使用的是同一套类库,这个类库就是 VCL ,为什么 Borland 做到两个不同的语言引用同一套类库呢? 因为 Borland 拥有 Pascal, Borland 通过修改编译器来修改 Pascal 语言使得它在数据类型和内存管理方面与 C++ 相拟,使得用这两种语言编译出来的程序能二进制兼容。虽然微软拥有 Basic, 但是 Basic 的先天优势是易学易用,微软无意去修改 Basic 使得 Basic 变得复杂。
微软使用 COM 来解决语言间的组件重用问题,并提出组件编程模型的概念, COM 的基本原理是通过定义一些编程契约,使得按照这些契约编写出来的组件 ( 以 dll/exe 的形式存在 ) 可以跨语言和跨平台地进行重用。
在 COM 推出之前,微软和 Borland 在开发工具的战场上斗得你死我活,而微软凭靠着 OLE 技术赢得了重要的一役胜利,微软在 OLE 的基础上创造了 COM 技术,并大幅地使用 COM 技术来构建 Windows 下的软件组件,其中, ADO 就是一个常用 COM 组件,不同的编程语言都可以调用 ADO 来访问和操 作数据库,因此, ASP 程序员会惊呀地发现,他用 ADO 编写的访问数据库的代码看起来与 VC 程序员访问数据库的代码是如此的相拟。
通过对微软技术历史的分析,可以发现 COM 的产生是一个偶然,当时微软为了对搞 Apple 的文件技术,从而推出 OLE(Object Linking and Embedding ,对象连接与嵌入 ) , OLE 的目的是让文件可以即时编辑,例如 Word 文档可以嵌到 Excel 中编辑, Excel 表格也可以嵌到 Word 中编辑, OLE 的成功使得微软察觉到跨语言组件重用的重要性,于是微软从 OLE 中抽取出一些重要的特性,并实现了 COM ,然后再用 COM 重写了 OLE 组件,所以可以说, COM 是在缺乏整体规划的情况下设计出来的,加上 OLE 庞大和复杂(当年 Borland 与微软的开发工具大战, Borland 在 OLE 上面吃了大亏),再加上随着需求的不断增加和修补, COM 并不易用,但这并不防止 COM 组件的成功,在 .NET 之前, COM 已经成为 Windows 下重要的组件编程技术,很多重要的组件 ( 如 ADO, ActiveX 组件 ) 等都是基于 COM 技术开发的,当时业界较流行的做法是 VC 程序员编写 COM 组件,然后由 VB 程序员或 ASP 程序员来将 COM 组件组装成提供给最终用户的软件产品, .NET 之前, COM 就是这样很好地解决了多种语言之间的组件重用问题。
以 Win32 SDK, COM 技术基础组成的 Windows DNA 技术经历了整个 90 年代的发展,期间根据市场需求不断的修修补补,已经非常壅肿,且积累了诸多诟病,某些技术过于复杂,开发效率低等,这些问题都成为了设计 .NET 的背景,下面我试图罗列出一些主要需要改进的地方 ( 列个大概,肯定不全,希望大家帮忙补充 ) :
1) COM 并不支持面向对象的诸多特性,例如不支持接口、继承等,在面向对象流行的今天已显得非常落后,目前大部分的生产力工具都是以面向对象为基础的(例如 UML 建模工具)。
2) 编写 COM 组件对于新手来说比较复杂,必须要遵守一些较为繁琐的规则,安装和部署需要修改注册表,不便于测试和部署。
3) COM 组件基于 exe/dll 的形式存在,而 dll 是 Windows 下重要的组件存在形式,但是 dll 也成了 Windows 下软件不稳定的罪魁祸首,原因 是大部分主要的 dll 都存放在一个统一的目录: Windows/System32 ,当安装一个新软件或者升级软件到新版本时,新的 dll 会覆盖旧的 dll 文件,从而可能会导致现有的软件无法工作或者不稳定,这是大名鼎 鼎 的Dll Hell (Dll 地狱 ).
4) COM 组件虽然可以跨语言进行调用,但是没有办法进行跨语言调试,例如在 VB 中调用 VC 编写的 COM 组件时,这个组件不能在 VB 中调试,造成软件调试困难。
5) 安全性方面,软件没有办法知道自已所引用的组件是否已被非法修改,安全控制也只停留在用户级别的控制上,没有办法做到代码级别上的安全控制,例如没有办法做到限制某个组件只能读取文件内容,但不能将内容写入文件。
随着信息化的需求不断演进,以及 JAVA 的流行,以及云计算等一些概念的提出,微软迫切需要修改自身的技术来适合市场的需求,显然,微软有两种解决方案:
1) 继续对 Windows DNA 的相关技术进行修修补补,在上面增加新功能,改进并修复错误。
2) 重新规划一套新技术,解决现有技术存在的问题。
微软选择了第 2 种方案,即重新规划一套新技术,在微软内部,新技术作为 COM 的更新版本被命名为 COM 2.0 (来源于 <<.NET 本质论 >> 一书),后来才改名为 CLR, 和 Windows DNA 以 COM 技术为基础一样, .NET 以 CLR为基础 ,而 CLR 显然可以看作是经过重构的、新版本的 COM ,只是新版本的 COM 比它的旧版本增强太大从而使 得它应该换个名字。微软用 .NET 这个名字来代替 Windows DNA ,来表示一系列新技术的统称 ( 其实就是一个商标 ) ,至于为什么使用 .NET 这个名字, NET 是网络的意思,微软使用 .NET 这个名字是预见未来将是网络应用、分布式计算的天下,而微软,已经做好了准备。
.NET 设计的首要目标,就是要解决旧技术中的诸多问题,针对上面对旧技术需要改进的一些问题,我们再回头来看看 .NET 是如何改进这些问题的:
1) 引入中间语言技术,程序在编译后产出中间语言而不是机器码,在中间语言这一层直接支持面向对象技术,并定义常用数据类型,最大限度地缩短不同编程语言之间 的差异,使得不同编程语言编写的代码可以无缝集成起来,例如 VB 编写的类可以在 C# 中继承、创建实例等等,这在以前是无法想像的。
2) 引用程序集的概念来解决 dll 地狱问题,安装新程序集不需要修改注册表,部署简单,不同的程序集版本可以同时存在,有趣的是,这个特性使得微软在推 出 .NET 新版本时,不用头痛去考虑旧 .NET 程序的兼容 (.NET 程序员也因为这个原因而对微软抱有不满 ) ,因为 .NET 的新旧类库可以相互共存,因此你的程序可以引用旧版本的 .NET 类库中的一部分,同时还可以引用新版 本 .NET 类库的另一部分,当然,这样的话,最终用户需要同时安装两个版本的 .NET Framework 。
3) 引入 Click One 技术使软件的安装和更新更简便 。
4) 支持代码级的安全控制。
5) 中间语言技术使得跨平台成为可能,目前 MONE 项目已使得 .NET 程序可以运行在 Linux 下,甚至 iPhone 手机上。
总之, .NET 技术是微软技术一次全面的重构,所以要在 Windows 下进行程序开发,学习 .NET 是大势所趋,虽然旧的技术 (COM/MFC 等 ) 还将存活一段时间,但微软保留这些技术更多是为了兼容旧的程序, Windows 下要使用新的技术和新的功能,首选还是 .NET 。
--------------------编程问答-------------------- 现在 .net 掌握好的 , 没有一个就是从开始就学 .net 的
不知道对不对 --------------------编程问答-------------------- 写的不错。.net还是很有前途的 --------------------编程问答-------------------- LZ,在移贴前早点把贴结了。
好文章,先赞了!! --------------------编程问答-------------------- 居然楼上有两为熟人顶了,我也顶下 --------------------编程问答-------------------- 看看先 --------------------编程问答-------------------- 顶。。 --------------------编程问答-------------------- 考虑这么多呀,我只学我自己喜欢的,并且努力的去学,,嘿嘿 --------------------编程问答-------------------- 好 --------------------编程问答-------------------- 顶..... --------------------编程问答-------------------- 第一次写这么长的帖子, 自已UP一下 --------------------编程问答-------------------- --------------------编程问答-------------------- 为了生存,为了吃饭。
相信大家都是逼不得以的。 --------------------编程问答-------------------- UP!~ --------------------编程问答-------------------- thank you. --------------------编程问答-------------------- 总之你多学学就明白为什么要学.net了,虽然做项目很多语言之间没什么太大的差距,但是你用了.net的水晶报表,GDI+,socket之类的东西你就会发现.net的不同了。 --------------------编程问答-------------------- 好东西 --------------------编程问答-------------------- --------------------编程问答-------------------- 不错哦,学习了。原来.net是这么诞生出来的。
--------------------编程问答-------------------- 学校的教科书太过时了, 很多东西都是毕业了,工作中学到的。像楼主这样的帖子对于我们这些新手来说太需要了。 --------------------编程问答-------------------- 呵呵,不错啊,嗯,现在.net好找工作啊,java难找!
不过两者学好的话,就不愁了! --------------------编程问答-------------------- 对微软的编程技术发展历程不太了解,只知道现在学.net是趋势 --------------------编程问答-------------------- 看看 --------------------编程问答--------------------
同感 --------------------编程问答-------------------- 学吧 --------------------编程问答-------------------- 我在学习ing。。。 --------------------编程问答-------------------- .Net 效率究竟会低下吗? --------------------编程问答-------------------- --------------------编程问答-------------------- 学习了! --------------------编程问答-------------------- 未知 --------------------编程问答-------------------- 现在都找不到工作~~~ --------------------编程问答-------------------- 顶下 --------------------编程问答-------------------- 顶下再看 --------------------编程问答-------------------- 很好 顶 --------------------编程问答-------------------- 也来顶一下 --------------------编程问答-------------------- 太长了,记不住撒 --------------------编程问答-------------------- 一. 微软的产品是玩具,很好用.但做不出什么大产品(那个企业用C#写出了相当于Office体积的桌面软件,有知道的给我说一下)
二. 所谓的创新, 正是应合了中国程序喜新厌旧的爱好.
三. 为了提高硬件销售 ,软硬联盟没有结束的. 微软的产品要求的硬件越来越高...(如果有越来越低的请举例) --------------------编程问答-------------------- 一个学JAVA的同学问我为什么选.NET我都回答不出来。下次人家问我我就知道怎么回答了 --------------------编程问答-------------------- 学习 --------------------编程问答-------------------- 鼎!!! --------------------编程问答-------------------- 这是啥啊? --------------------编程问答-------------------- hherheh呵呵 干吗那 --------------------编程问答-------------------- 楼主写的不错!赞一个! --------------------编程问答-------------------- 鼎!!!! --------------------编程问答-------------------- 分析的不错 --------------------编程问答-------------------- day day up!!! --------------------编程问答-------------------- 写的蛮多的~ --------------------编程问答-------------------- 呵呵 --------------------编程问答-------------------- 我正打算学好前端开发的基础之后去研究.NET
谢谢LZ的帖子。 --------------------编程问答-------------------- 另外一个事实是,borland 开发delphi的主要作者,跳槽到微软了,Delphi/C#之父:Anders Hejlsberg,
弄到现在delphi被卖掉了!
http://www.mybuffet.cn --------------------编程问答-------------------- 写的很是不错哦 --------------------编程问答-------------------- up --------------------编程问答-------------------- 喔,明白了. --------------------编程问答-------------------- 第一次被人安慰说.NET有(钱)前途,眼泪哗哗的,感谢楼主... --------------------编程问答-------------------- 顶 --------------------编程问答-------------------- 学习~!! --------------------编程问答-------------------- 不过也经常看到说.NET应用比较少的帖子 --------------------编程问答-------------------- very good!
--------------------编程问答-------------------- 就是 --------------------编程问答--------------------
我不得不又来给自己发一次广告帖,说明.net也是可以写应用的
详细参看 www.5dfly.cn
或者搜索 舞蝶飞照片制作软件 --------------------编程问答-------------------- 丿 --------------------编程问答-------------------- 不错,顶一下! --------------------编程问答-------------------- 学习! --------------------编程问答-------------------- 学无止境啊。
--------------------编程问答-------------------- 效率呢,总感觉慢 --------------------编程问答-------------------- 都在微软的战略方针指导下艰苦前行... --------------------编程问答-------------------- up一下 --------------------编程问答--------------------
我顶你!
如果。NET好,为什么微软不用.net开发自身的系统工具?相IIS,为什么用VC6开发? --------------------编程问答-------------------- UP --------------------编程问答-------------------- 希望以后我们不要学那么多的语言,全人类共用一种语言是终极目标。。。
VB与VC之间总是有决择的时候,但很长时间这两种语言会共存。。。
--------------------编程问答-------------------- 很好 --------------------编程问答-------------------- 学习学习 --------------------编程问答--------------------
新的编程语言的出现也是编程史上的进步,因为的现有的编程语言在某些地方不能满足一些新环境下的需要,这才诞生了新的语言,但是新的语言的出现并不是马上要在所有领域取代旧的、或者现有的编程语言的,或许它只在某个领域出现,或许全面取代,即使这样,它也避免不了最终会被别人取代的下场。 --------------------编程问答-------------------- 顶一下啊!学.net还是挺有前途的。
继续努力。 --------------------编程问答-------------------- 感觉是在说.NET产生的背景了`
感觉还是没完全说出真正的“为什么要学习.NET”!(要记我说,也说不上来,感觉而已,没有别的意思)
但想说一点就是,你选择的产品平台,决定了你技术的路线~
虽然对JAVA不熟悉,但.NET下的大型企业应用,就目前来看,似乎不是很多``
(U9还是争气,完全基于.NET平台开发的)
--------------------编程问答-------------------- 一阵子没来,这么多回复了,泪流满面啊 --------------------编程问答-------------------- ding.......... --------------------编程问答-------------------- 顶
--------------------编程问答-------------------- 将.net 进行到底 --------------------编程问答-------------------- 学习,收藏了.... --------------------编程问答-------------------- 顶了 --------------------编程问答--------------------
我认为,微软搞.NET是为了加强软硬联盟 君不见你的.NET程序需要增强硬件配置才能提高性能,君不见WPF是硬件驱动才能加快,君不见Vista要加大内存和CPU才能运行顺利................
--------------------编程问答-------------------- 学习,学习 --------------------编程问答-------------------- 最新的SQLSERVER和Windows 7里面有很多地方是用C#做的,当然C++占了大部分。
不知道你所说的大产品有多大,不过我想“SQLSERVER”、“windows”应该算是大产品吧。
微软的产品要求的硬件越来越高,并不是为了提高硬件销售,而是为了提高软件的生产效率,而软件的生产效率与运行速度通常是成反比的。
--------------------编程问答-------------------- 来分享一下大家的经验 --------------------编程问答-------------------- 顶起,。net --------------------编程问答-------------------- 好。顶! --------------------编程问答-------------------- UP --------------------编程问答-------------------- 楼主太强了!!
赞一个!! --------------------编程问答-------------------- DING --------------------编程问答-------------------- 呵呵,不错啊,嗯,现在.net好找工作啊,java难找!
不过两者学好的话,就不愁了! --------------------编程问答-------------------- 跟大侠们学习 --------------------编程问答-------------------- ding
我之前也是对。NET很迷茫,不知道学了找不找的到工作,甚至会不会浪费青春什么的,但是现在回过头来,还好我当初选择了.net 我很喜欢这们语言,尽管别人怎么说别的语言好,还是.net不好,我觉得只要专注一们语言, 切的深入点,你可以学到很多东西, 这些东西是第个语言所学不到,特定有的东西,到这个时候你才有资格有哪个语言好与不好。 --------------------编程问答-------------------- UP!~ --------------------编程问答-------------------- 分析的不错 --------------------编程问答-------------------- 说的不错 支持。 --------------------编程问答-------------------- 努力学习中! --------------------编程问答-------------------- .net是一定要学好的 --------------------编程问答-------------------- 顶一下。。。。。.net前景还是挺光明的 --------------------编程问答-------------------- 分析得有道理 --------------------编程问答-------------------- UP!~
补充:.NET技术 , .NET技术前瞻