2引用类型
引用类型,其含义是该类型的变量不直接存储所包含的值,而是指向它所要存储的值.在C#中提供以下引用类型给你使用:
类类型
字符串类型
数组类型
代表类型
接口类型
2.1类类型
类是面向对象编程的基本单位,它是一种包含数据成员,函数成员和嵌套类型的数据结构。类的数据成员有常量,域和事件,函数成员包括方法,属性,索引指示器,运算符,构造函数和析构函数。
2.2字符串类型
在C#中有一个用于操作字符串数据的基本字符串类型,字符串类直接派生自对象,且它是被密封的,这意味着再不能从它派生类。就象其它类型,字符串是预定义类SystemString的一个别名。
它的用法十分简单:
stringmyString = "sometext";
2.3数组
同C语言一样,C#语言中也有数组类型,但是与C语言中数组概念相比有了很大扩展。一个数组包含有通过计算下标访问的变量,所有包含于数组中且被当作元素的变量必须是同一类型。这种类型自然被称为"数组类型"。
让我们看一下用一个数组初始化器初始化的数组:
string[]arrLanguages={"C","C++","C#"};
该简写效果等同以下:
arrLanguages[0]="C";arrLanguages[1]="C++";arrLanguages[2]="C#";
2.4接口类型
一个接口是一个只有抽象成员的引用类型。C#中的接口只有方法名,但这些方法没有执行代码。
下面我们定义一个接口IFace,它只有一个方法:
interfaceIFace
{
voidShowMyFace();
}
3装箱和拆箱
装箱和拆箱是C#类型系统的核心概念。通过允许一个值类型转换成引用类型对象或从引用类型对象转换成值类型,这种机制形成了值类型和引用类型之间的捆绑连接。
3.1装箱转换
给一个值装箱是指隐式地把任何值类型转换成类型对象。当一个值类型被装箱时,一个对象实例就被分配,且值类型的值被拷贝给新的对象。
intnvalue=;
objectobj=nvalve;
3.2拆箱转换
和装箱相比,拆箱操作是显式操作——你必须告诉编译器,想从对象中抽取出哪一种值类型。当执行拆箱操作时,C#编译器检测所请求的值类型实际上存储在对象实例中。经过成功的确认,该值才能被拆箱。
下面我们举例说明如何进行拆箱操作:
intnvalue=;
objectobj=nvalve;
intnret=(int)obj;
上例中,我们定义了一个整形的变量、一个对象变量,然后我们将对象变量显式转换为整形,并赋值给整形变量nret。
4变量和常量
4.1变量
在计算机中变量代表存储地址,而变量的类型决定了存储在变量中的数值的类型。
变量的命名原则应该复合标识符的命名规则,在命名时应给出具有描述性质的名称,这样写出来的程序便于理解。
4.2常量
带有const修饰符声明的变量称为常量,常量就是其值固定不变的量
constintx=10;
下面的例子说明了各个变量的不同类型:
classA
{
publicstaticintx;
inty;
voidF(int[]v,inta,refintb,outintc)
{
inti=1;
c=a+b++;
}
}
在上面的变量声明中,x是静态变量,y是非静态变量,v[0]是数组元素,a是值参数,b是引用参数,c是输出参数,而i是局部变量
4.3静态变量
带有static修饰符声明的变量称为静态变量。静态变量的生存期是从被装载起,至到包含了这个变量的程序运行结束为止。
4.4非静态变量
不带有static修饰符声明的变量称为实例变量
局部变量是指在一个独立的程序块中声明的变量,局部变量的生存周期只在该范围中有效,当程序运行到这一范围时,该变量即开始生效,程序离开时变量就失效了。