结构体是值类型数据结构。它使得一个单一变量可以存储各种数据类型的相关数据。
struct一般用于一些结构简单,可以用单一值概念描述的类型。
格式:
struct 结构体类型名称{
访问修饰符1 类型1 变量名1;
访问修饰符2 类型2 变量名2;
……
访问修饰符n 类型n 变量名n;
//可以包含构造函数的定义
//可以有函数的定义
}
1)结构是值类型。
2)结构不支持继承。唯一的例外是结构和其他类型一样,都派生于System.Object。
3)为结构定义构造函数的方式与为类定义构造函数的方式相同,但不允许定义无参数的构造函数。
4)结构体的构造函数中,必须为结构体所有字段赋值。
5)结构变量声明不能指定初始值。
6)结构不允许声明析构函数。
7)结构成员不能指定为 abstract、virtual 或 protected。
这几条注意事项现在都不好理解,我们在学习面向对象时,还要复习类与结构体的区别
结构体中可以包含数组类型的变量,但是结构体的成员定义里不能直接赋值,所以public double[ ]score=new double[5]的写法是错误的。
正确的写法:
public double[ ]score;使用的时候再初始化,或者在构造函数中初始化。
不推荐使用,使用类更简单一些。
结构体数组
数据类型在一定的条件下是可以相互转换的,C#支持隐式转换(自动类型转换)和显式转换(强制类型转换)
隐式转换规则是:任何类型A,只要其取值范围完全包含在类型B的取值范围内,就可以隐式转换为类型B。
显式转换:
如:
double d=3.14;
int i=(int)d;
其他转换方法:
1)使用ToString()方法。所有类型都继承了Object类,所以都有ToString()这个方法(转化成字符串的方法)。
2)通过int.Parse()方法转换,参数类型只支持string类型。
3)通过int.TryParse()方法转换,该转换方法与int.Parse()转换方法类似,不同点在于int.Parse()方法无法转换成功的情况该方法能正常执行并返回0。
4)通过Convert类进行转换。
5)使用as操作符转换,但是as只能用于引用类型和可为空的类型。
6)装箱和拆箱
装箱和拆箱在值类型和引用类型之间架起了一座桥梁。
装箱:装箱是指将一个值类型的数据隐式地转换成一个对象类型(object)的数据。
拆箱:拆箱是指将一个对象类型的数据显式地转换成一个值类型数据。
装箱和拆箱都是要消耗内存和cpu资源的,也就造成效率降低,所以要尽量避免使用。
数据类型总表
局部变量:
1)局部变量存在于表示声明该变量的块语句或方法结束的右花括号之前的作用域内。
2)在for、while或类似语句中声明的局部变量存在于该循环体内。
全局变量:
static 变量类型 变量名称; //放在类中(所有函数的外面)