文章开始,先送上导图一张(千言万语,尽在其中!)~
C#语言是基于微软公司开发的.NET类库,受Java影响,由C/C++演变而来的。因此,C#语言与上述三者存在着很深的联系,下面我们就从上边的图入手,概括分析一下C#。
1、与C/C++关系
C#与上述两种语言相比,更加现代、简单、完全面向对象和类型安全。
现代:为编写下一代应用程序而产生,有很多新特性;简单:学习简单,抛弃了C++的复杂性,没有了指针、宏和多重继承,默认下所有放在任务托管中,垃圾回收由系统控制;完全面向对象:支持所有面向对象机制;类型安全:所有操作有一个类型安全。
2、与Java关系
C#可以说是在Java影响下产生的,因此,它们之间的联系就显得更为丰富。
二者联系。相同点:都是完全面向对象的语言;Java与C#语法类似而且Java类库与.NET基础类的结构也很相似;两者都依赖于字节代码;都取消了指针;实行自动垃圾回收机制;通过多接口实现多重继承等。
不同点:Java不如C#语法强大(不支持运算符重载和类型安全的枚举);C#可以与其他.NET语言编写的代码进行无缝交互操作,C#可以看做一个不太完整的Java替代器;.NET基类为C#提供了一个统一的、标准化的源,以满足常用功能的需要,但Java程序员有时必须从包中获取。
另外,Java跨平台性强,技术更加成熟,但有时其功能繁琐,显得学院派,而且开发人员成本高;.NET问题解决度比较强、开发效率较高等。
3、数据类型(结合VB)
C#的数据类型分为值类型和引用类型。
值类型中需要强调的是结构类型和枚举类型,引用类型包括类、接口和数组。
结构类型是由一组不同类型的成员所组成的新的数据类型,结构类型的变量值包含了所有成员的值。一个结构类型可以声明构造函数、常数、字段、方法、属性、索引、操作符和嵌套类型。尽管列出来的功能看起来象一个成熟的类,但在C#中,结构和类的区别在于结构是一个值类型,而类是一个引用类型。
枚举类型是另一种复合值类型,和结构类型不同的是,枚举类型要求成员只能是整数类型。枚举类型主要用于表示有逻辑上相关量的项的组合。
值类型和引用类型的区别:
值类型:表示实际数据,存储的数据有固定长度;该类型数据存贮在栈中,且只将值存放在内存中。
引用类型:表示指向数据的指针或引用,包含在内存中,如类、接口;引用类型数据存储在堆中。
注:栈用于存储固定长度的数据,堆是由new分配的内存,一般其存储速度较慢。
4、运算符(VB)
基本类型与VB相似,包括算术、比较、赋值、逻辑、条件、位、成员访问运算符。其中,算术运算符中多了一个简化方法(例:int a,a += b,即 a=a+b)
5、流程控制(VB)
顺序、循环、选择三大结构,参考VB学习,介绍一下Break/Using/Continue/Return语句,其他不再详述。
Break表示中断,可用于退出for/foreach/while或do…while循环,循环结束后,立即执行后面的语句;
Using语句可以确保在使用完资源密集型的对象后,就处理它们;
Continue语句类似于Break,也必须用于for/foreach/while或do…while循环中,它只从循环的当前迭代中退出,然后在循环的下一次迭代开始重新执行,而不是退出循环。
Return语句用于退出类的方法,把控制返回方法的调用者。如果方法有返回类型,return语句必须返回这个类型的值;若无返回类型,则该语句不能用与表达式。
6、数组(对比VB)
含义。数组是同一数据类型的一组值,它属于引用类型,因此存储在堆内存中。
声明方法。C#中数组的声明方法比较多,下面举几个例子:
int [] numbers; //定义一个int类型,名为numbers的任意大小的数组变量
int [] numbers=new int [5]; //声明并创建一个包含五个变量的int 类型数组
int [] numbers=new int [5] {1,2,3,4,5}; //声明并创建一个包含五个整数1,2,3,4,5的数组
int [] numbers={1,2,3,4,5};//声明一个包含五个整数1,2,3,4,5的数组
属性。(1)数组可以是一维、多维或交错的;交错数组是元素为数组的数组,交错数组元素的维度和大小可以不同。
例(交错数组):
class ArrayTest { static void Main() { // Declare the array of two elements: int[][] arr = new int[2][]; // Initialize the elements: arr[0] = new int[5] { 1, 3, 5, 7, 9 }; arr[1] = new int[4] { 2, 4, 6, 8 }; // Display the array elements: for (int i = 0; i < arr.Length; i++) { System.Console.Write("Element({0}): ", i); for (int j = 0; j < arr[i].Length; j++) { System.Console.Write("{0}{1}", arr[i][j], j == (arr[i].Length - 1) ? "" : " "); } System.Console.WriteLine(); } } }
结果为:element(0):1,3,5,7,9
element(1):2,4,6,8
(2)数值数组元素的默认值为0,引用数组元素的默认值为null;
(3)数组的索引从零开始,所以具有n个元素的数组的索引是从0至n-1;
(4)数组类型是从抽象基类型Array派生的引用类型,可以对C#中的所有数组实行foreach迭代。
关于OO和设计模式的部分,我们会在之后的文章中展开详述。
总结:针对C#的学习,一定要结合我们所学过的VB。各种语言之间都有很多相似的联系,从数据类型、控制结构、运算符、表达式等各个层面都有共同之处。
同样,VB作为基于面向对象的语言,它和C#的最大不同之处是缺少了继承,但存在封装和多态,因此,我们也有能力据此更深入的理解C#,理解OO。
原文:http://blog.csdn.net/u010191243/article/details/20850145