c编程外文文献.docx
- 文档编号:25710989
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:23
- 大小:35.70KB
c编程外文文献.docx
《c编程外文文献.docx》由会员分享,可在线阅读,更多相关《c编程外文文献.docx(23页珍藏版)》请在冰豆网上搜索。
c编程外文文献
附件一中文译文
C#编程语言概述
1.C,C++,C#的历史
C#程序语言是建立在C和C++程序语言的精神上的。
这个账目有着很有力的特征和易学的曲线。
不能说C#与C和C++相同,但是因为C#是建立在这两者之上,微软移除了一些成为更多负担的特征,比如说指针。
这部分观看C和C++,在C#中追踪它们的发展。
C程序语言原本是被定义在UNIX操作系统中的。
过去经常编写一些UNIX的应用程序,包括一个C编译器,最后被用于写UNIX自己。
它普遍认可在这个学术上的竞争扩展到包含这个商业的世界,脑上。
最初的WindowsAPI被定义与使用C同Windows代码一起工作,并且直到今天至少设置核心的Windows操作系统APIS保持C编译器。
来自一个定义的观点,C缺乏一个细节就像Smalltalk这类语言也包含的一样,一个对象的概念。
你将会学到更多的关于对象的内容在第八章“写面向对象的代码”一个对象作为一个数据的收集并且设置了一些操作,代码可以被C来完成,但是对象的观念并不能被强制出现在这个语言中。
如果你想要构造你的代码使之像一个对象,很好。
如果你不想这么做,C也确实不会介意。
对象并不是一个固有的部分在这门语言中,很多人并没有花很大的经历在这个程序示例中。
当面向对象的观点的发展开始得到认可之后,思考代码的方法。
C++被开发出,包含了这种改良。
它被定义去兼容C(就像所有的C程序同样也是C++程序,并且可以被C++编译器编译)C++语言主要的增加是提供这种新的概念。
C++又额外提供了的类(对象的模板)行为的衍生。
C++语言是C语言之上的改良体,不熟悉的不常用的语言上,例如VB,C和C++是很底层的,而且需要你错大量的编码来使你的应用程序很好的运行。
理和错误检查。
和C++可以处理在一些非常给力的应用程序中,码工作的很流畅。
被设定的目标是保持对C的兼容,C++不能够打破C的底层特性。
微软定义的C#保留了很多C和C++的语句。
码并且能想对快地识别代码。
对于C#来说一个很大的优势是它的设计师并没有让它去兼容C和C++。
当这看起来或许是个错误的处理时,事实上是一个好消息。
C#剔除了一些使得C和C++工作起来很困难的东西。
始怪癖和在C中发现的缺陷。
C#正在开始一个清洁的石板并且没有任何兼容需求。
因此它能够保持前辈的强项并且丢弃使得C和C++程序生存困难的弱点
2.引进C#
C#这门在.NET体系中被引进的全新语言,是从C++衍生出来的。
然而,C#是一门流行的,面向对象的(从头到尾)类型安全的语言。
语言特征
下面的部分提供了一个快速的视角关于C#语言的一些特征。
如果它们中的某些概念对你来说很陌生,不要着急,所有的东西都将在后续章节中详细说明。
类
在C#中,所有的代码和数据都必须被附在一个类中。
你不能在类外定义一个变量,同样的你也不能写任何不在类中的代码。
当一个类的对象被创建并且运行时,类就被构造了。
当类的对象被释放时,类也就被销毁了。
类提供了单继承,所有的类最终从基类获取的东西就是对象。
随着时间的推移,C#提供了有版本的技术去帮助你的类的形成来保养代码的兼容当你使用你更早期的类的代码的时候。
下面让我们来看一个叫做Family的类的例子。
这个类包含了两个静态的域来保存家庭成员的第一个名字和最后一个名字。
同样的,有一个方法来返回家庭成员的全名。
classClass1
{
publicstringFirstName;
publicstringLastName;
publicstringFullName()
{
}
returnFirstName+LastName;
}
注:
单继承意味着一个C#类只能从一个基类中继承。
C#是你能够打包你的类放到一个被称作namespace类的集合里面。
并且可以在逻辑聚合上帮助安排类的收集。
当你开始学习C#的时候,很明显所有的namespace都是和.NET类型的系统相关的。
微软同样选择包含了一些类辅助于兼容以前的代码和API的通道。
这些类同样包含在微软的namespace中。
数据类型
C#让你使用两种类型的数据工作:
值类型和引用类型。
值类型保存实际的值。
引用类型保存实际的值储存在存储器别处的位置。
原始的数据类型,例如字符型,整型,浮点型,枚举型还有结构体类型,这些都是值类型。
而对象和数组类型被处理成了引用类型。
C#预定义了引用类型(对象和字符串)新,字节,无符号短整型,无符号整型,无符号长整型,浮点型,双精度浮点型,布尔型,字符型和小数类型)的值类型和引用类型最终都会被一个基本类型的对象执行。
C#同样允许你将一个值或者一个类型转变为另外一个值或一种类型。
你可以使用隐式的转换策略或者显式的转换策略。
隐式的转换策略总是成功并且并不丢失任何信息(例如,你可以将一个整型转换为一个长整型而不用丢失任何信息因为长整型比整型长)换策略可能会是你丢失一些数据丢失因为长整型可以比整型保留更多的值)转换发生。
前后引用
参考第三章“同变量一起工作”来找到更多的关于显式和隐式转换策略的信息。
你可以同时使用单维和多维的数组在C#中。
多维数组能够变成一个矩阵。
当这个矩阵与多维数组有相同的面积大小。
或者参差不齐的,当有些数组有不一样的面积大小。
类和结构体可以拥有数据成员被称为属性和字段。
变量。
你可以定义一个叫做Employee的结构体,例如,有一个被称作Name的域,如果你定义了一个Employee类型的变量叫做CurrenrEmployee,你可以通过写CurrentEmployee.Name取回这些雇员的名字。
码赋值之后什么应该发生。
如果雇员的名字必须被一个数据库读,例如,你可以写一个代码“当一些人询问名字属性的值时,从数据库中读名字,并且返回这个名字用string类型”
函数
一个函数是一种可以随时使用的代码,代码。
一个函数的例子将会像FullName函数更早的展示的那样,在这一章中,在Family类中。
一个函数通常会联合一些返回信息的代码,而一个方法通常不返回信息。
然而对于我们而言,我们一般都会把它们都归结于函数。
函数可以拥有四种参数:
•输入的参数有值传递到函数内,但是函数无法改变它们的值。
•输出的参数没有值当他们被传递给函数时,但是函数可以给它们值并且将这个值传回给它的调用者。
•引用参数通过引用传递另外的一个值。
它们有一个值进入函数,并且这个值可以在函数中被更改。
•参数参数在列表中定义了一个数组变量。
C#和CLR一同工作来提供自动的存储管理。
或者“留足够的空间让这个对象使用”这样的代码。
CLR监视你的内存使用并且自动的取回更逗当你需要它的时候。
圾回收而著名)
C#提供了大量的运算符使得你能够写大量的数学和逐位运算的表达式。
他们当中的大量(并不是所有)运算符可以被重新定义,是你能够改变这些运算符的工作。
C#提供了一个长的报表的清单是你能够定义各种各样的处理路径通过你的代码。
通过报表的操作,使用关键字,就像switch,while,for,break和continue能够使你的代码根据变量值的不同分入到不同的路径中。
类能够包含代码和数据。
每一个成员对其他对象的可见性。
C#提供了public,protected,internal,protectedinternal和private这些可接近的范围。
变量
变量可以被定义为常量。
常量有固定的值并且你的代码执行过程中不能被改变,这个PI的值,例如,是一个很好的常量的例子,因为她得值将不会被改变在你的代码运行过程中。
枚举类型详细的定义了一种有关常量的名称。
例如,你可以定义一个枚举类型的行星使用值为MercuryV在你的代码中。
如果你使用一个变量去表示行星的时候,用这个枚举类型的names可以使你的代码变的更易读。
C#提供了一个嵌入式的机制去定义和处理一些事件。
如果你写了一个类执行了很漫长的操作,你或许想调用一个事件,当这个事件结束的时候,客户可以签署这个时间并且抓住这个事件在他们自己的代码中,他可以让他们被通知当你完成了这个漫长的预算,这个事件处理机制在C#中使用了委托,一个引用函数的变量。
注:
事件处理是一个在你代码中的程序,当一个时间发生时它决定了什么动作将会发生。
例如用户点击了一个按钮。
如果你的类保存了一个值,写一些叫做分度器的代码是你的类可以被访问就好像它是一个数组。
假定你写了一个叫做Rainbow的类,例如,它包含了一套颜色在这个彩虹中。
访问者或许想要些MYRainbow[0]来取出在彩虹中的第一个颜色。
你可以写一个分度器在你的Rainbow类中来定义什么将会被返回当这个访问者访问你的类时,就好像它是一个值的数组。
接口
C#提供了接口,它聚集了属性,方法,和阐述一套功能的事件。
C#的类可以执行接口,它通过接口告诉使用者这个类提供的一整套功能文件。
何现有的代码,它能尽可能少的兼容问题。
曾经有一个接口被公开了,它不能被改变,但是它能够通过继承来进化。
C#的类能够执行许多接口,即使这个类只能从一个基类继承。
让我们看一个现实世界的C#中有利于举例说明接口的非常明确的规则的例子。
许多应用程序尅使用今天提供的添加项。
执行的时候有读取添加项的能力。
要做这些,这个添加项必须遵守一些规则。
DLL添加项必须展示一个叫CEEntry的函数。
并且必须使用CEd作为DLL文件名的开头。
当我们运行我们的代码时,它可以扫描正在工作的以CEd开头的所有DLL的目录。
当它发现了一个,就被读取下来。
然后它用GetProcAddress来找出DLL中的CEEntry函数。
由此证明你服从所有的规则去建立一个添加项是必要的。
这种创建读取添加项是必要的,因为它担负了更多的不必要的代码责任。
如果我们使用一个接口在这个例子中,你的DLL添加项可以应用于一个接口。
由此保证所有必须的方法,属性和事件出现在DLL中,和作为文件指定的函数。
属性
属性声明了额外的信息关于你的类对于CLR。
在过去,如果你想要自己描述你的类,你不得不用一些分散的途径在存放在外部的文件中,例如IDL或者事件的HTML文件。
通过你的努力,属性解决了这个问题,这个发展者,约束了一些信息在类中,任何种类的信息,例如,在类中,定义它怎么行动当它被用到的时候。
可能性是没完没了的,这也是为什么微软会包含很多预定义的属性在.NET结构里。
编译C#
运行你的C#代码通过C#编译器产生了两类重要的信息:
代码和元数据。
接下来的部分描述了这两种主题并且完成了建立在.NET代码上的一块二进制的审查,那就是汇编。
微软中间语言(MSIL)
被C#编译器输出的代码是写在一种叫做微软中间语言中的。
MSIL是用来构造一套详细的说明来指导你怎样执行的你的代码。
它包含了操作的说明,例如变量的初始化,唤起对象的方法,错误处理以及声明一些新的东西。
C#并不仅仅是一种在编写过程中变化的来自MSIL源代码的语言。
所有的.NET兼容的语言,包括VB.NET和C++管理,当它们的源代码编译完成后产生了MSIL。
所有的.NET语言都是用相同的运行时间,所以来自不同语言的和不同编译器的代码可以很方便地在一起工作。
对于物理CPU而言,MISL并不是一套明确的指令。
它不知道任何关于你机器CPU的事,同样的你的机器也不知道任何有关MSIL的事。
那么,当你的CPU不能读取MSIL的时候,说明代码中。
这个击沉被称作恰好够用编写,或者JIT。
JIT编译器的工作是翻译你的普遍性的MSIL代码给机器以便CPU可以执行你的代码。
你也许想知道在进程中一个额外的步骤是什么样的。
当一个编译器可以立刻产生CPU解释的代码是为什么MSIL产生了?
终究,编译器总之在之后做了这些。
这里有很多引起这个的原因。
首先,MSIL使你能够较容易的编写代码当它移动到一个不同的硬件中。
假设你已经写了一些C#代码,并且你想让它同时运行在你的台式机和手提设备上。
非常有可能的是这两种设备有着不同的CPU。
如果你只有一个C#编译器其目标是一个明确的CPU,那么你就需要两个C#编译器:
一个的目标是台式机的CPU,另一个的目标是手提设备的CPU。
你不得不编译你的代码两次,以确保你的正确代码使用在了正确的设备上。
有了MSIL,你只用编写一次。
安装了.NET结构在你的台式机里,它包含了一个JIT编译器用来翻译你的MSIL中的CPU特定代码给你的机器。
安装了.NET结构在你的手提设备中,它包含了一个JIT编译器用来翻译同样的MSIL中的CPU特定代码给你的手提设备。
以运行在任何拥有.NETJIT编译器的设备上的MSIL基本代码。
你现在仅仅有一个可以运行在任何拥有.NETJIT编译器的设备上的MSIL基本代码在这些设备上的JIT编译器能够照顾你的代码使他们运行的很顺利。
另外一个编译器使用MSIL的原因是指令的设置能够很容易地被一个认证近程读取。
编译器的一部分工作就是核实你的代码以确保它能够尽可能的清晰。
正确地访问内存,型时。
这些检查确保了你的代码不会执行任何能够使你代码崩溃的指令。
MSIL指令设置定义使得这个检查进程想对地易懂。
CPU特定指令设置是为了快速执行代码而优化的。
但是它们使得代码难以被阅读,也因此很难被检查。
有一个可以立刻输出CPU特定代码的C#编译器能够使代码的检查很困难或者甚至不可能。
允许.NET结构的JIT编译器核实你的代码以确保你的代码通过一个漏洞很大的路径访问内存并且变量类型会被正确地使用。
元数据
汇编进程同样额输出元数据。
这是一个很重要的一部分.NET代码分享的故事。
不论你要用C#去建立一个客户端的应用程序还是用C#去建立一个被一些人用在应用程序上的类库,你都会想要利用一些已经编译好的.NET代码。
那个代码或许被微软提供了一部分.NET结构,或者它也许被一些网上的用户提供。
使用外来代码的关键是让C#编译器知道那个类和那个变量在另外的基础代码中以便它能够在你工作的预编译中发现并将你写的代码与源代码相匹配。
将元数据看目录对于你的编译代码而言。
C#编译的源代码位数在编译代码中和MSIL的生成一同存在。
的方法和变量的类型完全地在元数据中被描述,准备好被其他应用程序来读取。
例如,VB.NET可以从一个.NET库中读取元数据来提供对一个特定的类来说列出的所有能够被有效使用的方法的智能感应的能力。
如果你已经使用COM进行工作,你或许熟悉了类型库。
类型库的目标是提供同样的目录功能给COM对象。
然而,类型库从一些局限之处提供,事实上并不是所有的关于目标的数据都能被放入类型库中。
在.NET中的元数据并不具有这个缺点。
所有的用来描述类的信息的代码被放置在元数据中。
构件
有时,你需要用C#去建立一个终端的应用程序。
这些应用程序被打包成一个可执行的文件并且使用.EXE作为扩展名。
C#完全地支持.EXE文件的建立。
然而,也有几次你不想以被用于其它的程序。
你也许会想要建立一些实用的C#类,比如传给一个想要使用你的类在VB.NET应用程序中的VB.NET的开发者。
在这种情况下,你将不会建立一个应用程序,取而代之的你将建立一个构件。
一个构件是一个元数据的代码包。
当做一个单元来配置,并且这些类将会分享同样层级的版本控制,安全信息和动态需求。
将构件看做一个逻辑的DLL。
如果你对微软的翻译服务或者COM+很熟悉,那么你可以把构件看做与.NET等价的包。
有两种构件:
私有构件和全局构件。
当你建立了你自己的构件,你不需要指明你是想建立一个全局的构件还是私有的构件。
你只能使你的代码被单独的应用程序访问。
你的构件是一个类似于DLL的包,并且被安装进同样的目录当你的应用程序运行它时。
应用程序是在与你构件相同目录下时才可执行的。
如果你想要在更多的应用程序中分享你的代码,全局的构件。
全局构件可以被任何系统的.NET应用程序使用,而不用考虑它被安装在哪个目录中。
微软装配构件作为.NET结构的一部分,并且每个微软构件被安装作为一个全局构件。
微软结构SDK中包含了公用的可以从全局构件存储器中安装和删除构件的功能。
C#在某种程度上可以看作是.NET面向Windows环境的一种编程语言。
在过去的十几年里,虽然VB和C++最终已成为非常强大的语言,来的一些内容。
对于VisualBasic来说,它的主要优点是很容易理解,许多编程工作都很容易完成,基本上隐藏了WindowsAPI和COM组件结构的内涵。
其缺点是VisualBasic从来没有实现真正意义上的面向对象,的早期版本(BASIC主要是为了让初学者更容易理解,而不是为了编写大型商业应用程序),所以不能真正成为结构化或面向对象的编程语言。
另一方面,C++在ANSIC++语言定义中有其自己的根。
它与ANSI不完全兼容,因为Microsoft是在ANSI定义标准化之前编写C++编译器的,但已经相当接近了。
遗憾的是,这导致了两个问题。
其一,ANSIC++是在十几年前的技术条件下开发的,因此不支持现在的概念(例如Unicode字符串和生成XML文档),某些古老的语法结构是为以前的编译器设计的(例如成员函数的声明和定义是分开的)。
其二,Microsoft同时还试图把C++演变为一种用于在Windows上执行高性能任务的语言——在语言中避免添加大量Microsoft专用的关键字和各种库。
其结果是在Windows中,该语言成为了一种非常杂乱的语言。
让一个C++开发人员说说字符串有多少个定义方式就可以说明这一点:
char*、LPTSTR、(MFC版本)、CString(WTL版本)、wchar_t*和OLECHAR*等。
现在进入.NET时代——一种全新的环境,它对这两种语言都进行了新的扩展。
Microsoft给C++添加了许多Microsoft专用的关键字,并把VB演变为VB.NET,保留了一些基本的VB语法,但在设计上完全不同,从实际应用的角度来看,VB.NET是一种新语言。
在这里,VisualC#.NET。
Microsoft在正式场合把C#描述为一种简单、现代、面向对象、类型非常安全、派生于C和C++的编程语言。
大多数独立的评论员对其说法是“派生于C、C++和Java”C#非常类似于C++和Java,并用括号({})来标记代码块,用分号分隔各行语句。
对C#代码的第一印象是它非常类似于C++或Java代码。
但在这些表面上的类似性后面,C#学习起来要比C++容易得多,但比Java难一些。
其设计与现代开发工具的适应性要比其他语言更高,它同时具有VisualBasic的易用性、高性能以及C++的低级内存访问性。
C#包括以下一些特性:
●完全支持类和面向对象编程,包括接口和继承、虚函数和运算符重载的处理。
●定义完整、一致的基本类型集。
●对自动生成XML文档说明的内置支持。
●自动清理动态分配的内存。
●可以用用户定义的特性来标记类或方法。
这可以用于文档说明,对编译有一定的影响(例如,把方法标记为只在调试时编译)。
●对.NET基类库的完全访问权,并易于访问WindowsAPI。
●可以使用指针和直接内存访问,但C#语言可以在没有它们的条件下访问内存。
●以VB的风格支持属性和事件。
●改变编译器选项,ActiveX控件(COM组件)相同的方式由其他代码调用。
●C#可以用于编写ASP.NET动态Web页面和XMLWeb服务。
应该指出,对于上述大多数特性,VB.NET和ManagedC++也具备。
但C#从一开始就使用.NET,对.NET特性的支持不仅是完整的,而且提供了比其他语言更合适的语法。
C#语言本身非常类似于Java,但其中有一些改进,因为Java并不是为应用于.NET环境而设计的。
在结束这个主题前,还要指出C#的两个局限性。
其一是该语言不适用于编写时间急迫或性能非常高的代码,例如一个要运行1000或1050次的循环,并在不需要这些循环时,立即清理它们所占用的资源。
在这方面,C++可能仍是所有低级语言中的佼佼者。
其二是C#缺乏性能极高的应用程序所需要的关键功能,包裹保证在代码的特定地方与性的内联和析构函数函数。
但这类应用程序非常少。
附件二英文原文
C#ProgrammingLanguageOverview
AHistoryofC,C++,andC#
TheC#programminglanguagewascreatedinthespiritoftheCandC++programminglanguages.Thisaccountsforitspowerfulfeaturesandeasylearningcurve.Thesamecan'tbesaidforCandC++,butbecauseC#wascreatedfromthegroundup,Microsofttookthelibertyofremovingsomeofthemoreburdensomefeatures—suchaspointers.ThissectiontakesalookattheCandC++languages,tracingtheirevolutionintoC#.
TheCprogramminglanguagewasoriginallydesignedforuseontheUNIXoperatingsystem.CwasusedtocreatemanyUNIXapplications,includingaCcompiler,andwaseventuallyusedtowriteUNIXitself.Itswidespreadacceptanceintheacademicarenaexpandedtoincludethecommercialworld,andsoftwarevendorssuchasMicrosoftandBorlandreleasedCcompilersforpersonalcomputers.TheoriginalWindowsAPIwasdesignedtoworkwithWindowscodewritteninC,andthelatestsetofthecoreWindowsoperatingsystemAPIsremaincompatiblewithCtothisday.
Fromadesignstandpoint,ClackedadetailthatotherlanguagessuchasSmalltalkhadalreadyembraced:
theconceptofanobject.You'lllearnmoreaboutobjectsinChapter8,"WritingObject-OrientedCode."Fornow,thinkofanobjectasacollectionofdataandasetofoperationsthatcanbeperformedonthatdata.Object-stylecodingcouldbeaccomplishedusingC,butthenotionofanobjectwasnotenforcedbythelanguage.Ifyouwantedto
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编程 外文 文献
![提示](https://static.bdocx.com/images/bang_tan.gif)