虽然所有的值类型是从ValueType类继承而来,但是所有的值类型不可再派生出子类型了
.NET Framework中值类型的分类
要注意区分C#语言中的struct与图4-3中结构类型的差别
以下C#代码定义了一个struct类型,名字叫做MyPoint,它是属于“用户自定义类型”这一分支的。
public struct MyPoint
{
public int x;
public int y;
}
值类型变量之间的赋值,其含义是变量之间的值复制。请看以下代码:
MyPoint p1,p2;
p1.x = 100;
p1.y = 200;
p2 = p1;
Console.WriteLine("({0},{1})", p2.x, p2.y); //将输出(100,200)
值类型拥有一个隐含的构造函数,自动初始化其成员,.NET Framework规定数字类型变量一律初始化为0。
但C#比较特殊,它要求所有值变量必须初始化后才能使用,例如,以下代码无法通过编译。
int i;
i = i + 1;
需改为:
int i=new int(); //调用值类型的默认构造函数,初始化为0
i = i + 1;
或者给值类型变量赋一个初值:
int i=10; //调用值类型的构造函数,将初值设为10
i = i + 1;