有时我们可能对同一事物使用多个不同的变量来描述,如果将其分开来,显得不够灵活。结构类型很好的解决了这个问题,它把多个不同的变量组织在一起。其定义方法如下:
struct 结构名称
{
成员声明列表;
}
成员可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等。每个成员在声明的时候都采用如下的格式:
访问修饰符 类型 名称;
假设我们想描述一个点的位置和颜色,可以将其定义为结构类型的,方法如下:
struct point
{
double x; //表示点的横坐标
double y; //代表点的纵坐标
string color;
}
定义之后,我们就可以像使用其它数据类型那样来定义变量,如
point p1,p2;
即定义了两个point类型的变量p1和p2。在使用里面的成员时,可以通过.操作符来实现。如:
p1.x=23.4;p1.y=32;p2.color="绿色";
可能,大家感觉这种类型跟类类型相似,的确如此,但其也有着很大区别:
(1)结构是值类型,类是引用类型;
(2)结构中的成员如果没有指定访问修饰符,默认是public,而类是private;
(3)结构不能包含显式的无参数构造函数,结构成员自动初始化为它们的默认值,而类可以包含这样的无参构造函数;
(4)对于结构中的实例字段成员,不能在声明时赋值初始化;
(5)结构不支持继承,但是,结构可以从基类object继承。结构也可以实现接口。类支持继承,也可以实现接口。
结构是值类型,在为结构分配内存时,速度非常快。结构在析构时,速度也很快。另外,结构赋给另一个结构时(例如A=B,其中A和B是结构),结构的所有内容就被复制,而对于类,则只复制引用。结构的这一行为,就会有性能损失,根据结构的大小,性能损失也不同。
结构主要用于小的数据结构。但当把结构作为参数传递给方法时,最好作为ref参数传递,以避免性能损失。
下面给出关于结构体一个完整的例子:
using System;
namespace StructType
{
class Class1
{
struct student
{
public int sno;
public char sex;
public int age;
}
static void Main(string[] args)
{
student s;
s.sno=100;
s.sex='男';
s.age=23;
Console.WriteLine("学号为{0}的学生性别为{1};年龄为{2}",s.sno,s.sex,s.age);
}
}
}
运行效果如下图所示:
新闻热点
疑难解答