C#学习笔记_1

1.C#语音的数据类型分为三种:值类型、引用类型、指针类型。指针类型进应用于安全代码中。

值类型:值类型变量存储的是数据类型所代表的实际数据,值类型变量的值(或对象)存储在栈(Stack)中,赋值语句是传递变量的值。

引用类型:引用类型(类就是一个引用类型)的实例也叫对象,不存在栈(Stack)中,存储在可管理堆(Managed Heap)中,堆实际上计算机系统中的空闲内存。引用类型变量的值存储在栈(Stack)中,但存储的不是引用类型对象,存储的是引用类型对象的引用,即 地址,它和指针所表示的地址不一样,引用所代表的地址不能被修改,也不能转换成其他类型地址。它是引用型变量,只能引用指定类对象,引用类型变量赋值语句是传递对象的地址。见下例:

using System;
class MyClass//类为引用类型
{ public int a=0;
}
class Test
{ static void Main()
{ f1();
}
static public void f1()
{ int v1=1;  //值类型变量v1,其值1 存储在栈(Stack)中
int v2=v1;  //将v1 的值(为1)传递给v2,v2=1,v1 值不变。
v2=2;      //v2=2,v1 值不变。
MyClass r1=new MyClass(); //引用变量r1 存储MyClass 类对象的地址
MyClass r2=r1;    //r1 和r2 都代表是同一个MyClass 类对象
r2.a=2;    //和语句r1.a=2 等价
}
}

存储在栈中的变量,当其生命周期结束,自动被撤销,例如,v1 存储在栈中,v1 和函数f1 同生命周期,退出函数f1,v1 不存在了。但在堆中的对象不能自动被撤销。。因此C和C++语言,在堆中建立的对象,不使用时必须用语句释放对象占用的存储空间。.NET 系统CLR 内建垃圾收集器,当对象的引用变量被撤销,表示对象的生命周期结束,垃圾收集器负责收回不被使用的对象占用的存储空间。例如,上例中引用变量r1 及r2 是MyClass类对象的引用,存储在栈中,退出函数f1,r1 和r2 都不存在了,在堆中的MyClass 类对象也就被垃圾收集器撤销。也就是说,CLR 具有自动内存管理功能。

2.C#值类型变量的分类

􀁺 简单类型(Simple types)
简单类型中包括:数值类型和布尔类型(bool)。数值类型又细分为:整数类型、字符类
型(char)、浮点数类型和十进制类型(decimal)。
􀁺 结构类型(Struct types)
􀁺 枚举类型(Enumeration types)
C#语言值类型变量无论如何定义,总是值类型变量,不会变为引用类型变量。

3.C#值类型--结构类型

结构类型和类一样,可以声明构造函数、数据成员、方法、属性等。结构和类的最根本的区别是结构是值类型,类是引用类型和类不同,结构不能从另外一个结构或者类派生,本身也不能被继承,因此不能定义抽象结构,结构成员也不能被访问权限控制字protected 修饰,也不能用virtual 和abstract 修饰结构方法。在结构中不能定义析构函数。虽然结构不能从类和结构派生,可是结构能够继承接口,结构继承接口的方法和类继承接口的方法基本一致。

4.C#值类型--枚举类型

C#枚举类型使用方法和C、C++中的枚举类型基本一致。见下例:
using System;
class Class1
{ enum Days {Sat=1, Sun, Mon, Tue, Wed, Thu, Fri};
//使用Visual Studio.Net,enum语句添加在[STAThread]前边
static void Main(string[] args)
{ Days day=Days.Tue;
int x=(int)Days.Tue;//x=2
Console.WriteLine("day={0},x={1}",day,x);//显示结果为:day=Tue,x=4
}
}

在此枚举类型Days 中,每个元素的默认类型为int,其中Sun=0,Mon=1,Tue=2,依此类推。也可以直接给枚举元素赋值。例如:enum Days{Sat=1,Sun,Mon,Tue,Wed,Thu,Fri,Sat};在此枚举中,Sun=1,Mon=2,Tue=3,Wed=4,等等。和C、C++中不同,C#枚举元素类型可以是byte、sbyte、short、ushort、int、uint、long 和ulong 类型,但不能是char类型。见下例:
enum Days:byte{Sun,Mon,Tue,Wed,Thu,Fri,Sat};//元素为字节类型

 

 

5.值类型的初值和默认构造函数

所有变量都要求必须有初值,如没有赋值,采用默认值。对于简单类型,sbyte、byte、short、ushort、int、uint、long 和ulong 默认值为0,char 类型默认值是(char)0,float为0.0f,double 为0.0d,decimal 为0.0m,bool 为false,枚举类型为0,在结构类型和类中,数据成员的数值类型变量设置为默认值,引用类型变量设置为null。

可以显示的赋值,例如int i=0。而对于复杂结构类型,其中的每个数据成员都按此种方法赋值,这样很麻烦。由于数值类型都是结构类型,可用new 语句调用其构造函数初始化数值类型变量,例如 int j=new int()。用new 语句并不是把int 变量变为引用变量,j 仍是值类型变量,这里new 仅仅是调用其构造函数。所有的数值类型都有默认的无参数的构造函数,其功能就是为该数值类型赋初值为默认值。对于自定义结构类型,由于已有默认的无参数的构造函数,不能再定义无参数的构造函数,但可以定义有参数的构造函数。

 

posted @ 2016-07-04 19:09  遇见美好  阅读(598)  评论(0编辑  收藏  举报