C#和.Net的初步研究

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情
 研究了一下C#和.Net,有很多体会,好的不好的都有。随便谈谈,供大家参考。

先说说它的优点:

1、C#保留了对底层操作系统API的直接调用和指针。肯定是因为看到了Java的速度问题以及JNI的笨重,所以在设计C#时特意保留了这些C++的特性,避免了重导覆辙,也使得C#可以用来开发系统软件。普通应用都是调用.Net的程序集(相当于Java的类库,程序集里面都是byte code,不是native code),对于速度敏感,或者平台相关型应用,直接通过特定声明来调用Windows API。这样就可以功能,效率和速度都兼顾,解决各种各样的应用层问题和系统层问题(可以用C#来写系统软件了),用一种语言来解决所有场合的大部分问题,所以MS对C#很有信心。

不过实际上完全用C#开发系统软件还是不太可能的,毕竟经过C#的包装以后,比纯种的C还是要稍微慢一些,但是肯定比纯种的C#字节码快太多了。但是当你用C#开发应用软件的时候,却不可避免的涉及到底层调用的时候,可以方便的直接用C#来实现,不用像Java那样束手无策的去向C++求救,通过笨拙的JNI调用,显得高明。

2、在Windows平台上.Net CLR比Java的JRE速度快,联想到当年MS做的JVM,所以也不是很奇怪。只不过CLR速度足够快的话,C#字节码运行起来,普通应用就不会感觉出来速度比纯本地代码慢。我的感觉就是这样,基本上感觉不出来CLR启动和加载程序集的明显延迟,而不管用AWT,Swing还是SWT,JVM启动和加载类库的延迟是非常明显的,这就是真正不妙的地方了,不管Sun,IBM,BEA还是Open Souce 社区,在JVM的效率上还要继续加油。

3、开发工具IDE,老生常谈了,不过确实也很重要,对比一下Visual .Net Studio和做的最好的JavaIDE,JBuilder或者Eclipse吧,不在一个级别上。写普通的软件,甚至Web应用,IDE作用不明显,特别是对于有Unix背景的人来说,更愿意使用纯文本工具。但是涉及到GUI开发和企业应用的开发,一个强大的工具是必须的。

GUI开发来说,Visual .Net Studio开发GUI就如同使用VB开发GUI,方便和快捷的难以想像,再加上C#的程序集比VB的控件集,比VC的MFC的设计优秀的不在同一个级别上。所以在开发GUI方面,C#比VB还更加优秀,基本上和Borland的C++ Builder的水平相当,其操作的便捷还在其之上。

反观Java,Eclipse空有一个SWT,也不去做一个好点的GUI开发环境出来。JBuilder是公认的最好的Java GUI开发IDE,但是仍然难用的很,为什么?关键处还在于AWT,Swing和SWT图形库的布局设计上。

这3个图形库统统都是使用布局管理器来布局,布局好了以后才能放控件。不能够直接拖放控件实现绝对像素定位,也很难实现对控件大小,位置的操纵。

这也是有一定的原因,Java为了实现跨平台的GUI,因此不能够使用像素定位,否则在不同平台会有不同的外观表现。

而C#就不管那么多了,既然只在Windows平台上实现,直接就采用像素定位(当然布局定位也可以用),外观的控制自然可以“所见即所得”了。

由于这个先天的原因,Java的GUI开发是不可能比C#更方便的,JBuilder能做到这样,也差不多到极致了,大家也只能忍受了。

企业开发方面,C#需要SQL Server(Oracle也可以,但是不如SQL Server方便),IIS和MTS的配合,Java需要DB,App Server的配合。由于C#只管SQL Server和IIS,甚至只管IE浏览器,所以Visual .Net Studio可以做的很方便,整个开发过程一体化,不用考虑其它的实现。而JBuilder需要考虑各种不同的软件实现,特别是App Server,简直就是五花八门,JBuilder能够做到这样,在图形设计器里面设计EJB,从DB里面导入Entity Bean,方便的在所有的主流的App Server上自动编译EJB,部署EJB,测试EJB,也算做到极致了。

由于App Server五花八门和EJB部署本身的高度复杂度的原因,Java的企业开发也是远远不如C#来的快捷和方便。

这些原因导致了有时候一个J2EE项目会比.Net开发周期长两三倍的现象。

说完了C#和.Net的优势,再说说不足:

1、.Net平台支持多语言从技术上和开发角度来说是噱头,这完全是一个阴谋。
从ISV角度来看,完全没有支持多语言的必要,难道做一个项目,不同的模块用不同的语言来实现有价值吗?反过来说,这是一个灾难。对于将来的维护的升级来说是一个巨大的灾难,用VB.Net写的模块,C#程序员改不了,用C#写的模块,J#程序不能维护,人为的造成了混乱。再说C#又不是什么很难的东西,学习曲线也不高,何必不用C#,非要和自己过不去呢?

支持多语言的唯一目的在于吸引其它语言的开发人员转到.Net平台上来,不过当你被吸引转过来以后,还是发现用C#比较好,用你原来的移植语言不爽,还是不得不重新学习C#,这才发现上了大当了。所以完全是一个商业阴谋。

2、.Net在将来也不可能支持其它操作系统平台。
在前面已经提到了.Net和IIS,MTS,SQL Server等MS平台软件捆绑的很死,将来还要捆绑更多的MS软件,像IE,MSN等等。况且.Net依赖Windows也非常紧密。虽然有一个Open Source的Mono项目在移植CLR到Linux上来,不过据我来看,也只能做到仅此而已,光把CLR移植过来是没有多大价值的,需要把IIS,MTS,IE,MSN,SQL Server等等软件统统移植过来才能构成一个Linux平台上的.Net,但是这可能吗?

所以MS开放C#语言和CLI的规范又是一个商业阴谋,表面上装出一副拥抱开放的姿态,骨子里面却垄断的很。而且从MS的商业行为也可以看出这一点,我们知道MS把全部身家都压在.Net上和J2EE阵营竞争,如果.Net是一个开放平台,可以自由移植到Linux上,那么MS有什么理由不支持Linux操作系统呢?如果Linux上的.Net 支持的很好并且普及开来的话,J2EE恐怕只有在AIX和Solaris上苟延残喘的份了。正是因为MS要把.Net锁定Windows,所以才害怕Linux,如果Linux在服务器市场击败了Windows,那么.Net也只剩下苟延残喘的份了。所以现在MS视Linux为眼中钉,肉中刺。

所以MS开放C#和CLI,除了做作姿态之外,也可以在更多的OS上普及C#编程的教学,等你们熟悉了C#编程,再乖乖的在我的Windows上替我开发吧。

3、.Net傻瓜相机
众所周知,C#和.Net的学习曲线比Java和J2EE平坦的太多了。C#学习比Java轻松很多,而.Net框架学习比J2EE轻松太多了。那么Java程序员投入多了几倍的时间和精力就完全没有价值了吗?况且从开发角度来说,同样的项目C#也要比Java周期短,程序员开发轻松很多,难道这个世道对Java程序员这么不公平吗?没有理由下的功夫少,却得到同样的收获,所谓世上没有白吃的午餐。

经过我对C#和.Net的粗浅研究,我发现其实这是一个傻瓜相机和专业相机的问题。MS做出来的.Net的好学,易用,就如同傻瓜相机一样,一按就OK,不过照片质量一般。专业相机麻烦是麻烦,不过经过专业人士的手,拍出来的都是高质量的照片,当然你让普通非专业人员去操纵专业相机确实太勉强了一些。

.Net傻瓜相机确实太方便了,方便到了对组件的管理都对程序员透明化了。数据库缓冲池是由OLE DB Driver自动管理的;组件的管理是由MTS自动管理的,程序员不需要去管这些中间层的问题,开发好组件,用GAC注册一下就好了,使用的过程中,由.Net平台的MTS等等实际上完成App Server功能的服务自动处理。.Net Framkwork Configuration配置工具也是如此的简单,都是MS在帮你代劳。在运行.Net程序的平台上注意一下dllhost.dll这个进程,就是专门管理组件的。

不过从反面的角度来看,开发人员丧失了对组件部署的控制能力。在J2EE的世界,EJB或者说J2EE部署者是一个很重要的脚色,绝对不是可有可无,企业应用软件的运行性能很大程度上依赖对对于中间层组件的部署和性能调节和排错。所以EJB组件本身就是一个可以通过内部的XML配置文件参数进行性能自调节的组件,App Server更是提供了数量庞大,功能繁多的调节和部署选择。对于一个要求比较严格的企业软件来说,你要提供高效,稳定和安全的运行,手工进行复杂的tunning是必须的。对于只有一个全自动按钮的.Net傻瓜相机来说,实在是无能为力。

所以有所得就必有所失,.Net傻瓜相机在赢得了大部分普通程序员的同时,仍然无法进入企业高端领域,或者至少在目前是如此。不过不排除将来有这个可能性。

再看J2EE,EJB确实笨拙,开发起来速度也慢,但是一个构造良好,设计合理的J2EE应用经过高手的tunning,绝对是稳如磐石,令人放心。其系统的质量也不是目前的.Net所能比的。

说到这里觉得很有趣,MS从开始到现在,几乎所有的软件产品都在充当傻瓜相机的角色,就是到了.Net,MS也没能改变宿命。

Windows vs Unix
SQL Server vs Oracle
.Net vs J2EE

所以我敢断定,将来J2EE和.Net的处境也会类似今天服务器市场的Windows Server与Unix,数据库市场的SQL Server和Oracle。普通应用会更多的采用.Net,而高端应用更多采用J2EE。另外.Net还有一个不利的因素是J2EE虽然好像阳春白雪,其实下里巴人。J2EE既可以采用昂贵的商业App Server和DB的强强组合,也可以采用完全不要钱的免费方案,用成本来冲击低端市场,所谓各有各的活法。这也是MS比较头疼的。

4、分布式领域的不成熟

这体现在几个方面:

(1) 分布式应用的Session管理

.Net的方案是几台App Server把全局Session放在一个共享的SQL Server中,实在是...笨拙,不用再评价了!
好好学习一下Weblogic集群的内存复制技术吧!.Net还差的远呢

(2) .Net的分布式组件

MS的DCOM已经过时了,让我们看看在.Net里面如何实现分布式组件。
首先在.Net中,普通组件和分布式组件是不同的,在编写代码的时候采用的方法就不同。一般组件类似于J2EE中的普通类,分布式组件要采用TCP Channel或者HTTP Channel来实现,完全两种不同的编程模型,MS建议采用HTTP Channel,因为可以穿越防火墙。而对于J2EE应用来说,一般商业组件都采用EJB编写,分布还是不分布,区别只是部署的时候放不放在一台机器而已。我没有仔细研究过TCP Chaneel或者HTTP Channel,不便于和EJB做对比,不过感觉上,这种Channel的可编程性和可管理性比EJB还差得远。

(3) XML Web Services

.Net 上的Web Services加了一个耐人寻味的XML,什么原因大家体会一下。.Net的Web Services实现要靠IIS的ASP.Net,把组件以asmx的后缀放到IIS的Web目录下,当通过浏览器第一次访问的时候,Web Services自动编译和发布,同时生成WSDL。编程起来倒是好方便,但是我隐隐约约的感觉到MS的Web Services方案另有用意。什么用意呢?联想到第(2)点,我觉得MS的XML Web Services是DCOM的替代品。也就是说MS没有想到一个更好的解决分布式组件的方法,既可以容易的使用C#编程,同时又很容易部署,很容易进行分布式组件调用。万般无奈之下,在上面的Channel方案之外,又搞出这个XML Web Services,其实就是MS的分布式组件而已。但是HTTP SOAP调用的效率和安全性目前还比较差,还不能和EJB调用相比。况且XML Web Services仍然没有解决可管理性的问题,Web Services的性能调节看来只能靠IIS了。看看吧,EJB确实够笨拙,但是可编程能力,可管理能力,至今仍然是MS望尘莫及的。

所以就目前的.Net框架来说,MS还是暴露了在企业领域资历不够的弱点,Anders是程序语言设计的天才,设计了Turbol Pascal(也是我最早最喜欢的编程语言,在高一开始学习),Delphi和C#,不过他还不是企业领域的天才。
C#(csharp)这门语言的优势在哪? 确实有不少人因为unity入坑C#,unity刚开始使用的语言也有很多,比如Unity(一种Java的扩展)或者Boo(一种受Python启发的语言),但C#坚持至今甚至成为unity使用主流,C#当然有它的优点。 阅读详情

相关推荐

.NETC#的区别

.NET框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开发(Rapidapplication development)、平台无关性网络透明化的软件开发平台。.NET是微软为下一个十年对服务器桌面型软件工程迈出的第一步。

MrLsss的博客 6596

浅谈ASP.NET Core中间件实现分布式 Session

主要介绍了浅谈ASP.NET Core中间件实现分布式 Session,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

C#.Net Framework的联系区别

C#语言    C#是微软公司发布的一种面向对象的、运行于.NET Framework之上的高级程序设计语言。并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究员Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、接口、与Java几乎同样的语法编译成中间代码再运行的过程。但是C#Java有着明显的不同,它借鉴了Delphi

邢金聪 廊坊师范学院九期信息技术提高班 2万+

ChinaBcbMagazine01

c++builder电子杂志第一期,比较老,看看还可以。

C#.Net初步研究(转自ChinaBCB)

研究了一下C#.Net,有很多体会,好的不好的都有。随便谈谈,供大家参考。 先说说它的优点: 1、C#保留了对底层操作系统API的直接调用指针。肯定是因为看到了Java的速度问题以及JNI的笨重,所以在设计C#时特意保留了这些C++的特性,避免了重导覆辙,也使得C#可以用来开发系统软件。普通应用都是调用.Net的程序集(相当于Java的类库,程序集里面都是byte code,不是native

bryanjackie的专栏 1077

.NET 6.Net Core学习笔记:.NET Core的重要问题

什么是C#.NET中主要的开发语言。 推荐C#书籍:《C#图解教程》,《C#入门经典》 尽管绝大部分用法都没变,但是.NET Core不是 .NET Framework的升级版,无法直接升级 绝大部分用法没有变,但又有部分是不能使用的。 又被微软坑了? .NET Framework白学了? 软件开发界的技术是不断进步的,像现在很火的python3,从python2到python3,python2中的有些类方法就不能使用了。 要有开放的心态,没有白学绝大部分的.NET Framework到

薛定谔的猫 6381

C#.Net初步研究 (转)

C#.Net初步研究 (转)[@more@]C#.NET初步研究 研究了一下C#.Net,有很多体会,好的不好的都有。随便谈谈,供大家参考。 先说说它的优点: 1、C#保留了对底层操作系统api的直接调用指针。肯...

csd3176的博客 169

.Net程序加壳初步研究

所以C#程序在没有任何安全加固的情况下,直接把编译好的二进制文件发出去,就相当于直接把源码给别人了,所以一般都会对软件进行加壳防护,以增加攻击方的时间成本,甚至阻止低水平攻击者的逆向行为。查阅资料后得到:这个过程是在加载CLR引擎,最终目的是执行DLL里面的IL逻辑。所以C#程序编译出来的xxx.exe只是一个类似加载器的东西,真正的代码在DLL里面。既然有隐藏,那么肯定有还原的过程,这个是壳代码的工作。加密IL,简单理解就是把二进制文件中关于代码的部分加密了,目的是防止静态反编译分析。

qq_43148856的博客 1666

Visual Studio.NET 2005 (Whidbey) 初探

最近在这里发表了很多言语,伤心的,难过的。好像博客园的主旋律:专注.NET技术有很大的偏差。此外我在上一篇文章中说要保持头脑的清醒,无论什么时候都应该知道自己应该做的是什么,这让我下决心今天来写一篇关于.NET的文章,而不要总是在一些其他的事情中消沉。前几天一个朋友送了我一套MSDN professional. 我觉得对我而言最有价值的就是Visual Studio.NET 2005 beta ...

weixin_34192816的博客 97

.netc#的区别

今天同事闲聊的时候,突然发现了一个非常需要重申的问题。我们经常会问你们平台是用什么开发的呀?很多人会混淆了.netC#的含义;下面我们来温习一下基础知识。.net的含义:一般指.Net Framework框架,是Microsoft为开发应用程序而创建的一个具有革命意义的平台。内容:    .net有2种交互模式,分别是B/S,C/S。主要包含一个庞大的代码库,可从在客户语言(如C#)中通 过面...

木子夏_欣儿的博客 6万+

.NETC# ASP.NET 三者的关系区别

一、什么是 .NET ? .NET是微软公司下的一个开发平台,在这个平台下可以用不同的语言进行开发,如 C#、 F#、 Visual Basic等语言来编写.NET应用程序。 JAVA.NET不同的一点是java是跨平台的,不跨语言的。而.NET构建的应用程序,有些是跨平台的,有些则针对特定的OS或.NET实现。 .NET框架的组成分为两部分: CLR:公共语言运行时(Common Language Runtime),提供内在管理,代码安全性检测等功能。 FLC:.NET框架类库(.NET Frame

qq_30404223的博客 4979

ASP.NET.NETC#的区别关系

ASP.NET.NETC#的区别关系如下: 一、asp.net是一种用来快速创建动态Web网站的技术,不是语言,它使用C#(或者vb.net)为开发语言。C#是一种面向对象的编程语言;net只是一个框架,.net中所有的编程语言,比如c# vb.net等编写的程序必须在.netframework框架下运行。 .NET 分成两个方面:WinFormWebForm,ASP.NET就是属于WebForm,也就是平时说的B/S模式的开发。而WinForm就是属于C/S模式。 Asp.NE...

又小雪的工作、学习、生活问题记录 4472

C#.初步认识

Net:是一种用于构建多种应用的免费开源开发平台,可以在其平台上支持各种语言进行开发。.Net.Net系列开发框架的总称。包含.NET Framework、.Net Core 、Xamarin. .Net Framework:是一个由微软设计开发的软件框架,主要用来开发可以在 Windows 平台上运行的应用程序。提供托管执行环境、简化的开发部署以及与各种编程语言的集成。.NET Framework 支持 多种编程语言,如C#、VB.NET、C++等等。 .Net Core :是适用于 Win

傻响雨 1939

ASP.NET.NET FrameworkC#的关系

你好,是我琉忆。 今天我们讲一讲ASP.NET.NET FrameworkC#的关系。 在开始介绍ASP.NET之前,我们需要先了解以下运行ASP.NET的开发平台.NET框架。如果你之前学过C#那么对.NET框架会有一定的了解。当你在编写ASP.NET代码时会发现ASP.NET的代码C#相近甚至等同。那么你一定会有一些疑问。他们三者是什么关系呢?我们一起来看看。 一.NET Framework Microsoft.net是2000年6月22日微软向全世界推出的,全新的软件开发服务平台,目的

琉忆编程库 4429

C#入门--.NET Framework 及VS.NET

前言     如果说到C#,我认为不得不说的就是.NET FrameworkVS.NET。为什么呢?刚接触C#的时候,老师没有上来就说C#的语法,而是先讲.NET Framework,肯定是有原因的,我便简单的查了一下,这里说的也是我初步的一个认识,希望多多指教。 .NET Framework     .NET Framework是一个新的平台,这个平台可以用于C#,C++

No body But u 2698
hhit315
博客等级 码龄20年 0粉丝 1原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值