一、简介
C#是微软推出的一种基于.NET框架的、面向对象的高级编程语言。
C#以.NET框架类库作为基础,拥有类似Visual Basic的快速开发能力。
C#由安德斯·海尔斯伯格主持开发,微软在2000年发布了这种语言,希望借助这种语
言来取代Java。
C#是由C和C++衍生出来的一种安全的、稳定的、简单的、优雅的面向对象编程语
言。它在继承C和C++强大功能的同时去掉了一些它们的复杂特性(例如没有宏以及
不允许多重继承)。C#综合了VB简单的可视化操作和C++的高运行效率,以其强大
的操作能力、优雅的语法风格、创新的语言特性和便捷的面向组件编程的支持成
为.NET开发的首选语言。
设计目标
ECMA标准列出的C#设计目标:
1.C#旨在设计成为一种“简单、现代、通用”,以及面向对象的程序设计语言。
2.此种语言的实现,应提供对于以下软件工程要素的支持:强类型检查、数组维度检
查、未初始化的变量引用检测、自动垃圾收集(Garbage Collection,指一种存储器
自动释放技术)。
软件必须做到强大、持久,并具有较强的编程生产力。
3.此种语言为在分布式环境中的开发提供适用的组件开发应用。
4.为使程序员容易迁移到这种语言,源代码的可移植性十分重要,尤其是对于那些已
熟悉C和C++的程序员而言。
5.对国际化的支持非常重要。
6.C#适合为独立和嵌入式的系统编写程序,从使用复杂操作系统的大型系统到特定
应用的小型系统均适用。
7.虽然C#程序在存储和操作能力需求方面具备经济性,但此种语言在某些情况下并
不能在性能和程序大小方面与C语言相抗衡。
语言特性1. 相对于C和C++,这个语言在许多方面进行了限制和增强:
2. 指针(Pointer)只能用于不安全模式之中。大多数对象访问通过安全的引用实
现,以避免无效的调用,并且有许多算法用于验证溢出,指针只能用于调用值类
型,以及受垃圾收集控制的托管对象。
3. 对象不能被显式释放,代替为当不存在被引用时通过垃圾回收器回收。
4. 只允许单一继承(single inheritance),但是一个类可以实现多个接口
(interfaces)。
5. C#比C++更加类型安全。默认的安全转换是隐含转换,例如由短整型转换为长整
型和从派生类转换为基类。
6. 枚举型同整型不允许隐含转换,非空指针(通过引用相似对象)同用户定义类型
的隐含转换字段被显式的确定,不同于C++的复制构造函数。
7. 数组声明语法不同("int[] a = new int[5]"而不是"int a[5]")。
枚举位于其所在的名字空间中。
8. C#中没有模版(Template),但是在C# 2.0中引入了泛型(Generic
programming),并且支持一些C++模版不支持的特性。比如泛型参数中的类型
约束。另一方面,表达式不能像C++模版中被用于类型参数。
属性支持,使用类似访问成员的方式调用。
9. 完整的反射支持(反射指程序可以访问、检测和修改它本身状态或行为的一种能
力)。
特点
1. 简单、安全
在 C++ 和 C 语言中程序员最头疼的问题就是指针问题,在 C# 语言中已经不再
使用指针,而且不允许直接读取内存等不安全的操作。
它比 C、C++、Java 提供了更多的数据类型,并且每个数据类型都是固定大小
的。
此外还提供了命名空间来管理 C# 文件,命名空间 相当于一个文件夹,在创建程
序时,允许在一个命名空间中创建一个或多个类,方便调用和重用。
2. 面向对象
与其他面向对象语言一样,C# 语言也具有面向对象语言的基本特征,即封装、
继承、 多态。
封装:就是将代码看作一个整体,例如使用类、方法、接口等。在使用定义好的
类、 方法、接口等对象时不必考虑其细节,只需要知道其对象名以及所需要的
参数即可,也是一种提升代码安全性的方法。
继承:是一种体现代码重用性的特性,减少代码的冗余,但在 C# 语言中仅支持
单继承。
多态:不仅体现了代码的重用性,也体现了代码的灵活性,它主要通过继承和实
现接口的方式,让类或接口中的成员表现出不同的作用。3. 支持跨平台
最早的 C# 语言仅能在 Windows 平台上开发并使用,目前最新的 C# 6.0 版本已
经能在多个操作系统上使用,例如在 Mac、Linux 等。此外,还能将其应用到手
机、PDA 等设备上。
扩展:强类型、弱类型语言
强类型和弱类型主要是站在变量类型处理的角度进行分类的。这些概念未经过严格定
义,它们并不是属于语言本身固有的属性,而是编译器或解释器的行为。主要用以描
述编程语言对于混入不同数据类型的值进行运算时的处理方式。
强类型语言是指无论在编译阶段还是运行阶段,一旦变量绑定某种类型后,此变量会
持有该类型,并且不能与其他类型表达式进行混合运算。弱类型则相反。
也就是说,一旦一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永
远是这个数据类型了。举个例子:如果你定义了一个整型变量 a,那么程序根本不可
能将 a 当作字符串类型处理。强类型定义语言是类型安全的语言。
常见强类型语言包括:
Java
Python
C#
Go
常见弱类型语言包括:
C
C++
PHP
JavaScrip