C#讲义(二)

    技术2022-05-11  48

    name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3528650120430763&dt=1183890684015&lmt=1183890684&format=468x60_as&output=html&correlator=1183890684000&url=http://gmai9999.googlepages.com/home&ad_type=text_image&ui=rc:0&cc=100&flash=9&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="allowtransparency">   1.C#是一种从C++和Java继承而来的,简单的,现代的,面向对象的语言. 2.它的目标是综合Visual Basic高产和C++底层高效的特性. 3.它是Microsoft Visual Studio7.0 的一部分. 4.Visual studio支持Vb,VC++,C++,Vbscript,Jscript.所有这些语言提供对Microsft . NET平台的访问. 5..NET包括一个Common Execution引擎和一个丰富的类库. 6.Microsofts JVM eqiv就是Common language(通用语言)运行库(CLR). 7.CLR支持不止一种语言,诸如 C#,VB.NET,Jscript,ASP.NET,C++. 8.源代码--->中间语言代码(IL)--->(JIT 编译器)机器码. 9.类和数据类型对所有.NET语言是通用的. 10.我们能够用C#开发控制台应用程序,Windows应用程序,Web应用程序. 11.在C#中微软处理了C++问题,比如内存管理,指针等. 12.它支持垃圾回收(无用内存回收),内存自动管理和其他许多特性.   1.       C#的优点 A.简单 1.C#中指针已经消失. 2.不安全的操作,比方说直接内存操作不被允许了. 3.C#中"::"或"->"操作符是没用的. 4.因为它是基于.NET平台的,它继承了自动内存管理和垃圾回收的特点. 5.原始数据类型可变的数据范围象Integer,Floats等. 6.整形数值0和1不再作为布尔值出现.C#中的布尔值是纯粹的true和false值而且没有更 多的"="操作符和"=="操作符错误."=="被用于进行比较操作而"="被用做赋值操作.   B.现代 1.C#建立在当前的潮流上,对于创建相互兼容的,可伸缩的,健壮的应用程序来说是非常强 大和简单的. 2.C#拥有内建的支持来将任何组件转换成一个web service,运行在任何平台上的任何应 用程序都可以通过互联网来使用这个服务.   C.面向对象的 1.C#支持数据封装,继承,多态和对象界面(即java中的interface关键字). 2.(int,float,double)在java中都不是对象,但是C#引入和结构体(structs)来使原始数 据类型变成对象int i=1;String a=i Tostring();//转换(或者)Boxing   D.类型安全 1.在C#中我们不能进行不安全的类型转换象将double转换成boolean. 2.值类型(常量类型)被初始化为零值而引用类型(对象和类被编译器自动初始化为零值. 3.数组类型下标从零开始而且进行越界检查. 4.类型溢出将被检查.   E.相互兼容性 1.C#提供对COM和基于windows的应用程序的原始的支持. 2.允许对原始指针的有限制的使用. 3.用户不再需要显式的实现unkown和其它COM界面,这些功能已经内建. 4.C#允许用户将指针作为不安全的代码段来操作老的代码. 5.VB.NET和其它中间代码语言中的组件可以在C#中直接使用.   F.可伸缩性和可升级性 1..NET引入了零部件的概念,它们通过其"手册"具有自描述的功能.手册确立了零部件的 身份,版本,语言和数字签名等.零部件不需要在任何地方注册. 2.要扩展我们的程序,我们只需要删除老的文件并用新的文件来升级它们.不需要注册动 态链接库. 3.升级软件组件的过程只是一个错误探测的任务.对代码的修改能够影响现存的程序,C# 在语言中支持版本修改.对界面和方法重载的支持使得复杂的程序框架能随着时间发展和 进化.   G. 与WEB开发相结合 新的开发模式意味着需要更好的利用现有的各种WEB标准,例如HTML,XML,SOAP(简单对象存取协议)。现存的开发工具是在Internet出现前或是未得到充分应用前出现的,所以都不能很好的适应目前WEB技术的开发需要。 C#开发者可以方便的在M$网络平台上扩展自己的应用。C#可以将任何组件转变为WEB服务,并且可以被运行于Internet上的任何平台的任何应用调用,重要的是C#对这一特性提供了内置的支持。 更重要的一点,WEB服务框架可以让任何WEB服务都看起来类似于C#的内置对象,所以可以让开发人员在开发过程中继续使用他们已经具备的面向对象的开发方法和技巧。   此外C#还拥有许多其他特性使自己成为最出色的Internet开发工具。例如,XML目 前已经成为网络中数据结构传送的标准,为了提高效率C#将允许直接将XML数据映 射成为结构。这样的话可以有效的处理各种数据。 2.       C#的弱点  这个方案也暴露了微软对C#和.NET介绍中的一些有趣的漏洞。MSIL是.NET提供的一个新特性,允许很流行的程序设计语言编译到一个单独的公用语言。(.NET支持的语言种类是相当惊人的)。这些语言都要服从一种叫“通用语言规范(CLS)”的构架。微软称之为“CLS兼容语言和类库之间可互操作的通用语言”。       编译所有的语言到一个单一的公用语言上,能让“继承”通过多重语言真正执行。这轻而易举的扫除了C#可能遇到的错误概念。.NET组件使用COM的IDispatch,它只允许接口执行。它比先前C#被评定为一种OOP语言的看法容易接受得多。它在程序设计上或许像Java一样是面向对象的。       但不幸的是CLS这种包括MSIL的共享语言基础,只让RAD开发者受益,而损害了硬件的核心开发者,有人认为创造一种新程序设计语言的目的就是有能力充分运用它和服务于可微调的执行能力,这一点在CLS世界里是做不到的。老实说,加速充分利用从来不是许多语言的唯一目标。许多语言的唯一目标(最瞩目的是像Visual Basic和Java的RAD语言)是加速和美化开发和展开能力,而不仅仅是运行时刻的速度。       舒密特文章中所提到的确实包含了相关和值得注意的评论:你可以用C++指定.NET,并在你的代码中运用所有C++特性。同时,因为.NET在运行时刻不能检验C++代码是否安全,此语言并不遵从CLS规范,里面所书写的程序也受到限制。作为应对,微软往Visual C++里添加非标准管理的扩展。用这些扩展写的代码能符合CLS规范。       C#将把微软领向何方就一目了然了。因为所有项目编写会只依靠MSIL和CLS JIT编译程序。这样C#或任何MSIL前端语言比Java任何时候都快。但很不幸,程序设计和编译程序级的优化不能在非微软的平台上充分利用,想在非Windows平台上展开.NET,再充分运用它们也是不现实的。   一、C#与C++和Java 1.C#是VC的改进吗? 人们对微软过去几周的大肆宣传,最基本的错误理解就是C#只是Visual C++的改进版本。完全不是这么回事。C#和Java没有直接联系。它的特征设定是从Java获得的灵感。它的语法同Java一样,源自C和C++,但它的执行是完全新的,只依靠.NET结构。   C#也并非字节码(bytecode)。微软一位员工罗伯特.舒密特详细描述道:“C#编译程序产生的是‘微软中间语言’(MSIL)……但虚拟机或其他类似的技术则不能用于解释这种中间语言(IL)。相反地,每当应用程序载入或JIT编译程序需要编译它时,IL就会被转换成本地代码。一旦这种转换完成,可以执行的代码实际上是本地代码。”实质上,虽然这种方案有点像Java程序通过一个JIL编译程序,但这里最终的JIT编译是100%的本地代码,而Java的JIT产生的结果是不同的。   2.C#与C++和Java的功能比较 1 :比较 C# C++ Java 最重要的功能 功能 C# C++ Java 继承 允许继承单个类,允许实现多个接口 允许从多个类继承 允许继承单个类,允许实现多个接口 接口实现 通过“ interface ”关键词 通过抽象类 通过“ interface ”关键词 内存管理 由运行时环境管理,使用垃圾收集器 需要手工管理 由运行时环境管理,使用垃圾收集器 指针 支持,但只在很少使用的非安全模式下才支持。通常以引用取代指针 支持,一种很常用的功能。 完全不支持。代之以引用。 源代码编译后的形式 .NET 中间语言( IL 可执行代码 字节码 单一的公共基类 异常处理 异常处理 返回错误 异常处理。 name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-3528650120430763&dt=1183890684015&lmt=1183890684&format=468x60_as&output=html&correlator=1183890684000&url=http://gmai9999.googlepages.com/home&ad_type=text_image&ui=rc:0&cc=100&flash=9&u_h=768&u_w=1024&u_ah=738&u_aw=1024&u_cd=32&u_tz=480&u_java=true" frameborder="0" width="468" scrolling="no" height="60" allowtransparency="allowtransparency">

    最新回复(0)