
C#语言
C#语言 (C sharp) 是微软对这一问题的解决方案。C#是一种最新的、面向对象的程式语言。它使得程式设计师可以快速地编写各种基于Microsoft .NET平台的应用程式,Microsoft .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选——无论是高级的商业对象还是系统级的应用程式。使用简单的C#语言结构,这些组件可以方便的转化为XML 网路服务,从而使它们可以由任何语言在任何作业系统上通过Internet进行调用。
最重要的是,C#使得C++程式设计师可以高效的开发程式,而绝不损失C/C++原有的强大的功能。因为这种继承关係,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。
基本介绍
- 中文名:C#语言
- 外文名:C sharp
- 公司:微软
- 类型:程式语言
起源
C#(读做 "C sharp",中文译音暂时没有.专业人士一般读"C sharp",
很多非专业一般读"C井"。C#是一种安全的、稳定的、简单的、优雅的,由C和C++衍生出来的面向对象的程式语言。它在继承C和C++强大功能的同时去掉了一些它们的複杂特性(例如没有宏和模版,不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成为.NET开发的首选语言。并且C#成为ECMA与ISO标準规範。C#看似基于C++写成,但又融入其它语言如Pascal、Java、VB等。
微软c#语言定义主要是从C和C++继承而来的,而且语言中的许多元素也反映了这一点.C#在设计者从C++继承的可选选项方面比Java要广泛一些(比如说struts),它还增加了自己新的特点(比方说原始码版本定义).但它还太不成熟,不可能挤垮Java.C#还需要进化成一种开发者能够接受和採用的语言.而微软当前为它的这种新语言大造声势也是值得注意的.大家的反应是:"这是对Java的反击." C#更像Java一些,虽然微软在这个问题上保持沉默.这也是意料中的事情,我觉得,因为Java很成功而使用Java的公司都报告说它们在生产效率上比C++获得了提高. Java所带来的巨大影响和大家对它的广泛接受已经由工作于这种语言和平台之上的程式设计师数量明显的说明了(估计世界範围内共有两百五十万程式设计师使用Java).由这种语言写成的应用程式的数量是令人惊讶的并已经渗透了每一个级别的计算,包括无线计算和行动电话(比如日本发明的Java电话).C#能够在用户领域获得这样的礼遇吗?我们必须等待并观望,就像已经由SSI公司的CEO和主席Kalpathi S. Suresh指出来的那样,"我发现所有这些都是渐进的.如果C#不存在,我们总能回到Java或C和C++.这些都不完全是新技术;它们在更大的意义上来说只是大公司製造的市场噱头.我们必须给他们时间安顿下来看看这些是不是真的对IT工业有什幺影响."
特点分析
C#及其特点
C#是微软公司在2000年6月发布的一种新的程式语言,并定于在微软职业开发者论坛(PDC)上登台亮相。C#是微软公司研究院Anders Hejlsberg的最新成果。C#看起来与Java有着惊人的相似;它包括了诸如单一继承、界面、与Java几乎同样的语法,和编译成中间代码再运行的过程。但是C#与Java有着明显的不同,它借鉴了Delphi的一个特点,与COM(组件对象模型)是直接集成的,而且它是微软公司.NET windows网路框架的主角。
C# 是微软对这一问题的解决方案。C#是一种最新的、面向对象的程式语言。它使得程式设计师可以快速地编写各种基于MICROSOFT .NET平台的应用程式,MICROSOFT .NET提供了一系列的工具和服务来最大程度地开发利用计算与通讯领域。
正是由于C#面向对象的卓越设计,使它成为构建各类组件的理想之选——无论是高级的商业对象还是系统级的应用程式。使用简单的C#语言结构,这些组件可以方便的转化为XML网路服务,从而使它们可以由任何语言在任何作业系统上通过INTERNET进行调用。
最重要的是,C#使得C++程式设计师可以高效的开发程式,而绝不损失C/C++原有的强大的功能。因为这种继承关係,C#与C/C++具有极大的相似性,熟悉类似语言的开发者可以很快的转向C#。
C#是微软公司在2000年7月发布的一种全新且简单、安全、面向对象的程式设计语言,是专门为.NET的套用而开发的语言。它吸收了C++、Visual Basic、Delphi、Java等语言的优点,体现了当今最新的程式设计技术的功能和精华。C#继承了C语言的语法风格,同时又继承了C++的面向对象特性。不同的是,C#的对象模型已经面向Internet进行了重新设计,使用的是.NET框架的类库;C#不再提供对指针类型的支持,使得程式不能随便访问记忆体地址空间,从而更加健壮;C#不再支持多重继承,避免了以往类层次结构中由于多重继承带来的可怕后果。.NET框架为C#提供了一个强大的、易用的、逻辑结构一致的程式设计环境。同时,公共语言运行时(Common Language Runtime)为C#程式语言提供了一个託管的运行时环境,使程式比以往更加稳定、安全。其特点有:
· 语言简洁。
· 保留了C++的强大功能。
·快速套用开发功能。
· 语言的自由性。
· 强大的Web伺服器控制项。
· 支持跨平台。
· 与XML相融合。
C#与C++的比较
C#对C++进行了多处改进,主要区别如下:
· 编译目标:C++代码直接编译为本地可执行代码,而C#默认编译为中间语言(IL)代码,执行时再通过Just-In-Time将需要的模组临时编译成本地代码。
·记忆体管理:C++需要显式地删除动态分配给堆的记忆体,而C#不需要这幺做,C#採用垃圾回收机制自动在合适的时机回收不再使用的记忆体。
·指针:C++中大量地使用指针,而C#使用对类实例的引用,如果确实想在C#中使用指针,必须声明该内容是非安全的。不过,一般情况下C#中没有必要使用指针。
· 字元串处理:在C#中,字元串是作为一种基本数据类型来对待的,因此比C++中对字元串的处理要简单得多。
· 库:C++依赖于以继承和模板为基础的标準库,C#则依赖于.NET基库。
· C++允许类的多继承,而C#只允许类的单继承,而通过接口实现多继承。
·C#亦应该于网页设计。如ASP与ASP.NET。而C++则无。
在后面的学习中会发现,C#与C++相比还有很多不同和改进之处,包括一些细节上的差别,这里就不一一列举了。
C#与Java的比较
· C#面向对象的程度比Java高。
· C#中的基本类型都是面向对象的。
· C#具有比Java更强大的功能。
· C#语言的执行速度比Java快。
语法关键字
abstract:可以和类、方法、属性、索引器及事件一起使用,标识一个可以扩展但不能被实体化的、必须被实现的类或方法。
as:一个转换操作符,如果转换失败,就返回null。
base:用于访问被派生类或构造中的同名成员隐藏的基类成员。
catch:定义一个代码块,在特定类型异常抛出时,执行块内代码。
checked:既是操作符又是语句,确保编译器运行时,检查整数类型操作或转换时出现的溢出。
const:标识一个可在编译时计算出来的变数值,即一经指派不可修改的值。
delegate:指定一个声明为一种委託类型。委託把方法封装为可调用实体,能在委託实体中调用。
enum:表示一个已命名常量群集的值类型。
event:允许一个类或对象提供通知的成员,他必须是委託类型。
explicit:一个定义用户自定义转换操作符的操作符,通常用来将内建类型转换为用户定义类型或反向操作,必须再转换时调用显示转换操作符。
extern:标识一个将在外部(通常不是c#语言)实现的方法。
finally:定义一个代码块,在程式控制离开try代码快后执行。参见try和catch。
fixed:在一个代码块执行时,在固定记忆体位置为一个变数指派一个指针。
foreach:用于遍历一个群集的元素。
goto:一个跳转语句,将程式执行重定向到一个标籤语句。
implicit:一个操作符,定义一个用户定义的转换操作符,通常用来将预定义类型转换为用户定义类型或反向操作,隐式转换操作符必须在转换时使用。
interface:将一个声明指定为接口类型,即实现类或构造必须遵循的契约。
internal:一个访问修饰符。
namespace:定义一个逻辑组的类型和命名空间。
operator:用来声明或多载一个操作符。
out:标识一个参数值会受影响的参数,但在传入方法时,该参数无需先初始化。
params:声明一个参数数组。如果使用,必须修改指定的最后一个参数,允许可选参数。
readonly:标识一个变数的值在初始化后不可修改。
ref:标识一个参数值可能会受影响的参数。
sealed:防止类型被派生,防止方法和property被覆载。
sizeof:一个操作符,以byte为单位返回一个值类型的长度。
stackalloc:返回在堆上分配的一个记忆体块的指针。
struct:是一种值类型,可以声明常量、栏位、方法、property、索引器、操作符、构造器和内嵌类型。
throw:抛出一个异常。
try:异常处理代码块的组成部分之一。try代码块包括可能会,抛出异常的代码。参阅catch和finally关键字。
typeof:一个操作符,返回传入参数的类型。
unchecked:禁止溢出检查。
unsafe:标注包含指针操作的代码块、方法或类。
using:当用于命名空间时,using关键字允许访问该命名空间中的类型,而无需指定其全名。也用于定义finalization操作的範围。
virtual:一个方法修饰符,标识可被覆载的方法。
volatile:标识一个可被作业系统、某些硬体设备或并发执行绪修改的attribute。
as:一个转换操作符,如果转换失败,就返回null。
base:用于访问被派生类或构造中的同名成员隐藏的基类成员。
catch:定义一个代码块,在特定类型异常抛出时,执行块内代码。
checked:既是操作符又是语句,确保编译器运行时,检查整数类型操作或转换时出现的溢出。
const:标识一个可在编译时计算出来的变数值,即一经指派不可修改的值。
delegate:指定一个声明为一种委託类型。委託把方法封装为可调用实体,能在委託实体中调用。
enum:表示一个已命名常量群集的值类型。
event:允许一个类或对象提供通知的成员,他必须是委託类型。
explicit:一个定义用户自定义转换操作符的操作符,通常用来将内建类型转换为用户定义类型或反向操作,必须再转换时调用显示转换操作符。
extern:标识一个将在外部(通常不是c#语言)实现的方法。
finally:定义一个代码块,在程式控制离开try代码快后执行。参见try和catch。
fixed:在一个代码块执行时,在固定记忆体位置为一个变数指派一个指针。
foreach:用于遍历一个群集的元素。
goto:一个跳转语句,将程式执行重定向到一个标籤语句。
implicit:一个操作符,定义一个用户定义的转换操作符,通常用来将预定义类型转换为用户定义类型或反向操作,隐式转换操作符必须在转换时使用。
interface:将一个声明指定为接口类型,即实现类或构造必须遵循的契约。
internal:一个访问修饰符。
namespace:定义一个逻辑组的类型和命名空间。
operator:用来声明或多载一个操作符。
out:标识一个参数值会受影响的参数,但在传入方法时,该参数无需先初始化。
params:声明一个参数数组。如果使用,必须修改指定的最后一个参数,允许可选参数。
readonly:标识一个变数的值在初始化后不可修改。
ref:标识一个参数值可能会受影响的参数。
sealed:防止类型被派生,防止方法和property被覆载。
sizeof:一个操作符,以byte为单位返回一个值类型的长度。
stackalloc:返回在堆上分配的一个记忆体块的指针。
struct:是一种值类型,可以声明常量、栏位、方法、property、索引器、操作符、构造器和内嵌类型。
throw:抛出一个异常。
try:异常处理代码块的组成部分之一。try代码块包括可能会,抛出异常的代码。参阅catch和finally关键字。
typeof:一个操作符,返回传入参数的类型。
unchecked:禁止溢出检查。
unsafe:标注包含指针操作的代码块、方法或类。
using:当用于命名空间时,using关键字允许访问该命名空间中的类型,而无需指定其全名。也用于定义finalization操作的範围。
virtual:一个方法修饰符,标识可被覆载的方法。
volatile:标识一个可被作业系统、某些硬体设备或并发执行绪修改的attribute。
C# 类型体系包含下列几种类别:
值类型
引用类型
指针类型
值类型的变数存储数据,而引用类型的变数存储对实际数据的引用。引用类型也称为对象。指针类型仅可用于unsafe模式。
通过装箱和取消装箱,可以将值类型转换为引用类型,然后再转换回值类型。除了装箱值类型外,无法将引用类型转换为值类型。
值类型也可以为 null,这意味着它们能存储其他非值状态。