c#( 二 )


c#

文章插图
C# Project类可以是抽象的和不可继承的:一个被申明成abstract的类不能被实例化,它只能被用做一个基类,C#关键字lock就像Java关键字final,它申明一个类不是抽象的,但是它也不能被用做另一个类的基类接口:就象在Java中一样,一个接口是一组方法集合的抽象定义 。当一个类或结构体实现一个接口的时候,它必须实现这个接口中定义的所有方法 。一个单一的类可以实现几个接口,也许以后会出现一些微妙的差别,但是这个特点看起来与Java相比没有变化 。布尔运算:条件表达式的结果是布尔数据类型,布尔数据类型是这种语言中独立的一种数据类型,从布尔类型到其他类型没有直接的转换过程,布尔常量true和false是C#中的关键字 。错误处理:如Java中那样,通过抛出和捕捉异常对象来管理错误处理过程 。记忆体管理:由底层.NET框架进行自动记忆体垃圾回收 。接口:是其他类型为确保它们支持某些操作而实现的引用类型 。接口从不直接创建而且没有实际的表示形式,其他类型必须转换为接口类型 。一个接口定义一个协定 。实现接口的类或结构必须遵守其协定 。接口可以包含方法、属性、索引器和事件作为成员 。强类型:C#是一个强类型的语言,它的数值类型有一些可以进行隐式转换,其他的必须显式转换,隐式转换的类型只能是长度短的类型转换成长的类型,int可以转换成long、float、double、decimal,反之必须显式的转换 。编译:程式直接编译成标準的二进制可执行形式.但C#的源程式并不是被编译成二进制可执行形式,而是一种中间语言(IL),类似于JAVA位元组码 。如果前面的Hello World程式被保存成一个文本档案并被命名为Hello.cs,它将被编译成命名Hello.exe的可执行程式 。
c#

文章插图
c#与asp.net权威指南教程C#程式不能直接编译成标準的二进制可执行形式,与 Java 类似,它被编译成为中间代码(Microsoft Intermediate Language),然后通过 .NET Framework 的虚拟机——被称之为通用语言执行层(Common Language Runtime, CLR)——执行 。一个C#的结构体与C++的结构体是相似的,因为它能够包含数据声明和方法.但是,不象C++,C#结构体与类是不同的而且不支持继承.但是,与Java相同的是,一个结构体可以实现接口 。预编译:C# 中存在预编译指令支持条件编译,警告,错误报告和编译行控制.可用的预编译指令有:#define,#undef,#if,#elif,#else,#endif,#warning,#error,#line 。没有了#include伪指令,无法再用#define 语句对符号赋值,所以就不存在原始码替换的概念--这些符号只能用在#if和#elif伪指令里.在#line伪指令里的数字(和可选的名字)能够修改行号还有#warning和#error输出结果的档案名称 。操作符重载:一些操作符能够被重载,而另一些则不能.特别的是,没有一个赋值运算符能够被重载.能够被重载的单目操作符是:+ - ! ~ ++ -- true false 能够被重载的二元运算符是:+、 - 、*、 /、 %、 &、 |、 ^、 << 、>>、 ==、 !=、 >、 < 、>= 、<= 。类型:C# 中的类型一共分为两类,一类是值类型(Value Type),一类是引用类型(Reference Type) 。值类型和引用类型是以它们在计算机记忆体中是如何被分配的来划分的 。值类型包括 结构和枚举,引用类型包括类、接口、委託 等 。还有一种特殊的值类型,称为简单类型(Simple Type),比如 byte,int等,这些简单类型实际上是FCL类库类型的别名,比如声明一个int类型,实际上是声明一个System. Int32结构类型 。因此,在 Int32类型中定义的操作,都可以套用在int类型上,比如 “123.Equals(2)” 。所有的值类型都隐式地继承自System.ValueType类型(注意System.ValueType本身是一个类类型),System.ValueType和所有的引用类型都 继承自 System.Object基类 。不能显式地让结构继承一个类,因为C#不支持多重继承,而结构已经隐式继承自ValueType 。NOTE:堆叠(stack)是一种后进先出的数据结构,在记忆体中,变数会被分配在堆叠上来进行操作 。堆(heap)是用于为类型实例(对象)分配空间的记忆体区域,在堆上创建一个对象,会将对象的地址传给堆叠上的变数(反过来叫变数指向此对象,或者变数引用此对象) 。中间代码:微软在用户选择何时MSIL应该编译成机器码的时候是留了很大的余地.微软公司很小心的声称MSIL不是解释性的,而是被编译成了机器码.它也明白许多--如果不是大多数的话--程式设计师认为Java程式要不可避免的比C编写的任何东西都要慢.而这种实现方式决定了基于MSIL的程式(指的是用C#,Visual Basic,"Managed C++"--C++的一个符合CLS的版本--等语言编写的程式)将在性能上超过"解释性的"Java代码.当然,这一点还需要得到事实证明,因为C#和其他生成MSIL的编译器还没有发布.但是Java JIT编译器的普遍存在使得Java和C#在性能上相对相同.象"C#是编译语言而Java是解释性的,"之类的声明只是商业技巧.Java的中间代码和MSIL都是中间的彙编形式的语言,它们在运行时或其它的时候被编译成机器代码 。