-------Windows Phone 7手机开发、.Net培训、期待与您交流! -------
C#是强类型语言,在C#程序中每个变量和对象都必须声明类型。从数据存储的角度来分,可分为值类型和引用类型。值类型用于存储数据的值,引用类型用于存储对实际数据的引用。
值类型分为:
1.简单类型:表示一个有唯一取值的数据类型,包括整型、浮点型、小数型、布尔型等。
2.枚举型:枚举型实质就是使用符号来表示的一组相互关联的数据。
注意:(1)枚举元素的数据值是确定的,一旦声明就不能在程序的运行过程中更改。
(2)枚举元素的个数是有限的,同样,一旦声明就不能在程序运行过程中更改。
(3)默认情况下,枚举元素的值是一个整数,第1个枚举数的值为0,后面每个枚举数依次递增1.
(4)如果需要改变默认的规则,则重写枚举元素的值即可,例如:
Enum myenum{a=101,b,c,d=201,e,f};
在此枚举数中,a为101,b为102,c为103,d为201,e为202,f为203。
3.结构型:包括数据成员和方法成员。数据成员表示结构的数据项,方法成员表示对数据项的操作。
引用类型分为:
1.类:程序设计中,类是现实世界中同类事物的进一步抽象,是最基本的编程单位,由若干个数据成员、数据方法等组成。
注意:结构型和类的区别:(1)结构型是值类型,类是引用型,因此使用结构型定义变量可以不使用new运算符来初始化,而使用类定义的变量必须使用new运算符来初始化(2)结构型可以实现接口,但无法继承另一个结构型,因此不需要使用protected来保护结构型的成员,而类也可以实现接口,允许继承另一个类,为此可以使用protected保护类成员。
2.接口:接口与类的关系是,接口负责制定类的标准行为,而类负责实现这些行为。
3.委托:是C#提供的一种以托管机制调用方法的特殊数据类型。
4.数组:数组是一种由若干个变量组成的集合,数组中包含的变量称为数组的元素,它们具有相同的类型。数组元素可以是任何类型,包括数组类型。数组的声明:
数组类型[] 数组名 = new 数组类型[数组长度]
5.字符串。
注意:值类型变量一经定义系统就会为其分配内存空间并自动初始化,而引用型变量必须使用运算符new和构造函数创建,这样才会获得内存空间和被初始化。
装箱和拆箱
装箱:是把一个值类型的数据转换为一个对象类型的数据。装箱过程是隐式转换过程,由系统自动完成,一般在赋值运算前完成。
拆箱:是把一个对象类型数据转换为一个值类型数据,拆箱过程必须是显式转换过程。拆箱时先检查对象所引用的数据的类型,确保拆箱前后的数据类型相同,再复制出一个值类型数据。
注意:装箱操作与拆箱操作必须遵循类型兼容原则,否则转换会失败,系统抛出System.InvalidCastException异常。
常量和变量
常量:程序运行过程中,其值始终不变的量。包括整型常量、浮点型常量、小数型常量、字符型常量、布尔值常量和字符串型常量。
变量:程序运行过程中,其值可以被改变的量。变量具有名字和取值,程序运行过程中,通过变量名来引用变量的值。
数据类型转换
1.隐式转换:有C#语言编译器自动完成。
2.显示转换:为了避免隐式转换可能带来的错误,需要使用强制转换来执行显示转换。
注意:无论是强制转换还是隐式转换,都只是为了本次运算的需要对变量的数据长度进行临时性转换,而不改变该变量已经定义的类型。
运算符
1.算数运算符:包括+、-、*、/、%、++、--共7种,前五种都是二目运算符,后两种为一目运算符。
2.赋值运算符:包括简单赋值运算符,即“=”。以及复合赋值运算符,常见的复合赋值运算符有+=、-=、*=、/=、%=、&=、|=、^=、<<=、>>=等
3.关系运算符:用来对两个操作数比较,包括==、!=、<、>、<=、>=
4.逻辑运算符:包括!、&&(或&)、||(或|)、^
注意:&&与&的区别是:当第一个操作数为false时,前者不再计算第二个操作数的值。
||与|的区别是:当第一个操作数为true时,前者不再计算第二个操作数的值。
^表示对两个布尔型操作数进行异或运算,当且仅当只有一个操作数为true时,结果才为true.
分支语句
包括if语句和switch语句
注意:在C#里switch语句中不支持从一个case标签显示贯穿到另一个case标签,因此在每一个case块的后面都必须有一个break语句,但当case语句中没有代码时例外。
循环语句
1.while语句和do-while语句,两者的区别是while语句中循环体执行的次数可能是0次,do-while中循环体执行的次数至少是1次。
2.for语句
3.foreach语句
foreach(类型循环变量 in 表达式){}
其中,“类型”是用来定义循环变量的类型,它应和“表达式”的数据类型保持兼容,“表达式”一般是一个数组名或集合名。
Break语句可用于switch语句中,表示立即跳转出switch语句。此外,break语句还可以用于循环结构中,用来立即终止循环,跳出循环结构。
Continue语句只能用于循环结构。它的作用是忽略continue后面的语句,直接进入本循环结构的下一次循环操作。
方法的参数传递
声明方法时,所定义的参数是形式参数(形参),这些参数的值由调用方负责为其传值。调用方传递的是实际数据,成为实际参数(实参)。
方法的参数有4种类型:一是值类型参数,不含任何修饰符;二是引用型参数,用ref修饰符声明;三是输出参数,使用out修饰符声明;四是数组型参数,使用params修饰符声明。
1.值类型参数:调用方向方法传递值类型参数时,被调用方所接收到的只是实参数据值的一个副本。当在方法内部改变形参的数据值时,不会影响实参变量的值,即实参变量和形参变量是两个不同的变量,他们具有各自的内存地址和数据值。实参变量的值传递给形参变量时是一种单向值传递。
2.引用型参数:调用方向方法传递引用型参数时,调用方将实参变量的引用赋给相对应的形参变量。因此,如果在方法内部更改了形参变量所引用的数据值,则同时也修改了实参变量引用的数据值。由于使用return语句一次只能返回一个数据值,如果需要返回多个数据,可以利用引用型参数来实现。
C#通过ref关键字来声明引用参数,无论是形参还是实参,都必须添加ref关键字。
3.输出参数:使用引用型参数可以使方法中返回多个结果,但要求先初始化实参。而输出参数不需要对实参进行初始化,它专门用于把方法中的数据通过形参返回给实参,不会将实参的值传递给形参。
C#通过out关键字来声明输出参数,无论是形参还是实参,都必须添加out关键字。
4.数组型参数:把数组作为参数,有两种使用形式:一是在形参数组前不添加params修饰符,另一种是添加该修饰符。不添加params修饰符时,所对应的实参必须是一个数组名;添加该修饰符时,所对应的实参可以是数组名,也可以是数组元素值的列表。
方法的重载
方法的重载是指在同一个类型中,以同样的名称声明两个或多个方法。方法的重载需要方法的参数的个数不同或者参数的类型不同,与方法的返回值无关。