C# Programming Language Overview
A History of C, C , and C#
The C# programming language was created in the spirit of the C and C programming languages. This accounts for its powerful features and easy learning curve. The same cant be said for C and C , but because C# was created from the ground up, Microsoft took the liberty of removing some of the more burdensome features — such as pointers. This section takes a look at the C and C languages, tracing their evolution into C#.
The C programming language was originally designed for use on the UNIX operating system. C was used to create many UNIX applications, including a C compiler, and was eventually used to write UNIX itself. Its widespread acceptance in the academic arena expanded to include the commercial world, and software vendors such as Microsoft and Borland released C compilers for personal computers. The original Windows API was designed to work with Windows code written in C, and the latest set of the core Windows operating system APIs remain compatible with C to this day.
From a design standpoint, C lacked a detail that other languages such as Smalltalk had already embraced: the concept of an object. Youll learn more about objects in Chapter 8, ' Writing Object-Oriented Code.' For now, think of an object as a collection of data and a set of operations that can be performed on that data. Object-style coding could be accomplished using C, but the notion of an object was not enforced by the language. If you wanted to structure your code to resemble an object, fine. If you didnt, fine. C really didnt care. Objects werent an inherent part of the language, so many people didnt pay much attention to this programming paradigm.
After the notion of object-oriented development began to gain acceptance, it became clear that C needed to be refined to embrace this new way of thinking about code. C was created to embody this refinement. It was designed to be backwardly compatible with C (such that all C programs would also be C programs and could be compiled with a C compiler). The major addition to the C language was support for this new object concept. The C language added support for classes (which are 'templates' of objects), and enabled an entire generation of C programmers to think in terms of objects and their behavior.
The C language is an improvement over C, but it still has some disadvantages. C and C can be hard to get a handle on. Unlike easy-to-use languages like Visual Basic, C and C are very 'low level' and require you to do a lot of coding to make your application run well. You have to write your own code to handle issues such as memory management and error checking. C and C can result in very powerful applications, but you need to ensure that your code works well. One bug can make the entire application crash or behave unexpectedly.
Because of the C design goal of retaining backward compatibility with C, C was unable to break away from the low level nature of C.
Microsoft designed C# to retain much of the syntax of C and C . Developers who are familiar with those languages can pick up C# code and begin coding relatively quickly. The big advantage to C#, however, is that its designers chose not to make it backwardly compatible with C and C . While this may seem like a bad deal, its actually good news. C# eliminates the things that makes C and C difficult to work with. Because all C code is also C code, C had to retain all of the original quirks and deficiencies found in C. C# is starting with a clean slate and without any compatibility requirements, so it can retain the strengths of its predecessors and discard the weaknesses that made life hard for C and C programmers.
Introducing C#
C#, the new language introduced in the .NET Framework, is derived from C . However, C# is a modern, objected-oriented (from the ground up) type-safe language.
Language features
The following sections take a quick look at some of the features of the C# language. If some of these concepts dont sound familiar to you, dont worry. All of them are covered in detail in later chapters.
Classes
All code and data in C# must be enclosed in a class. You cant define a variable outside of a class, and you cant write any code thats not in a class. Classes can have constructors, which execute when an object of the class is created, and a destructor, which executes when an object of the class is destroyed. Classes support single inheritance, and all classes ultimately derive from a base class called object. C# supports versioning techniques to help your classes evolve over time while maintaining compatibility with code that uses earlier versions of your classes.
As an example, take a look at a class called Family. This class contains the two static fields that hold the first and last name of a family member as well as a method that returns the full name of the family member.
class Class1
{
public string FirstName;
public string LastName;
public string FullName()
{
}
return FirstName LastName;
}
Note Single inheritance means that a C# class can inherit from only one base class. C# enables you to group your classes into a collection of classes called a namespace. Namespaces have names, and can help organize collections of classes into logical groupings. As you begin to learn C#, it becomes apparent that all namespaces relevant to the .NET Framework begin with System. Microsoft has also chosen to include some classes that aid in backwards compatibility and API access. These classes are contained within the Microsoft namespace.
Data types
C# lets you work with two types of data: value types and reference types. Value types hold actual values. Reference types hold references to values stored elsewhere in
剩余内容已隐藏,支付完成后下载完整资料
C# 编程语言概述
1. C,C ,C#的历史
C#程序语言是建立在C和C 程序语言的精神上的。这个账目有着很有力的特征和易学的曲线。不能说C#与C和C 相同,但是因为C#是建立在这两者之上,微软移除了一些成为更多负担的特征,比如说指针。这部分观看C和C ,在C#中追踪它们的发展。
C程序语言原本是被定义在UNIX操作系统中的。过去经常编写一些UNIX的应用程序,包括一个C编译器,最后被用于写UNIX自己。它普遍认可在这个学术上的竞争扩展到包含这个商业的世界,脑上。最初的Windows API被定义与使用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的类的例子。这个类包含了两个静态的域来保存家庭成员的第一个名字和最后一个名字。同样的,有一个方法来返回家庭成员的全名。
class Class1
{
public string FirstName;
public string LastName;
public string FullName()
{
}
return FirstName 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,protected internal和private这些可接近的范围。
变量
变量可以被定义为常量。常量有固定的值并且你的代码执行过程中不能被改变,这个PI的值,例如,是一个很好的常量的例子,因为她得值将不会被改变在你的代码运行过程中。枚举类型详细的定义了一种有关常量的名称。例如,你可以定义一个枚举类型的行星使用值为Mercury V在你的代码中。如果你使用一个变量去表示行星的时候,用这个枚举类型的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特定代码给你的手提设备。以运行在任何拥有.NET JIT编译器的设备上的MSIL基本代码。 你现在仅仅有一个可以运行在任何拥有.NET JIT编译器的设备上的MSIL基本代码在这些设备上的JIT编译器能够照顾你的代码使他们运行的很顺利。
另外一个编译器使用MSIL的原因是指令的设置能够很容易地被一个认证近程读取。编译器的一部分工作就是核实你的代码以确保它能够尽可能的清晰。正确地访问内存,型时。这些检查确保了你的代码不会执行任何能够使你
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[499609],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。