您当前的位置: 首页 >  c#

C#数据类型-结构类型

发布时间:2010-11-22 15:20:00 ,浏览量:0

有时我们可能对同一事物使用多个不同的变量来描述,如果将其分开来,显得不够灵活。结构类型很好的解决了这个问题,它把多个不同的变量组织在一起。结构和类有很多相同的地方,结构可以看成一个轻量的类。结构使用struct关键字定义。

其定义方法如下:

struct 结构名称        {              成员声明列表;        }

成员可以包含构造函数,常数,字段,方法,属性,索引器,运算符和嵌套类型等。

每个成员在声明的时候都采用如下的格式: 访问修饰符   类型   名称; using System; struct Teacher { public string Name; // 老师姓名 public uint Age; // 老师年龄 public string Phone; // 老师电话 public string Address; // 老师通讯地址 public void Eat() {     Console.WriteLine("老师每天中午回家吃饭!"); } }

class Test { public static void Main() {     Teacher t; // 声明结构类型Teacher的变量t     t.Name = "小刘";     t.Age = 35;     t.Phone = "13381335310";     t.Address = "北京大学";     Console.WriteLine("该老师姓名={0},年龄={1},电话={2},通讯地址={3}", t.Name,       t.Age, t.Phone, t.Address);     t.Eat(); } }

我们可以看出结构类型跟类类型相似,的确如此,但其也有着很大区别:

(1)结构是值类型,类是引用类型;

(2)结构中的成员如果没有指定访问修饰符,默认是public,而类是private;

(3)结构不能包含显式的无参数构造函数,结构成员自动初始化为它们的默认值,而类可以包含这样的无参构造函数;

(4)对于结构中的实例字段成员,不能在声明时赋值初始化;

(5)结构不支持继承,但是,结构可以从基类object继承。结构也可以实现接口。类支持继承,也可以实现接口。 我们再看:

struct Teacher { public string Name; // 老师姓名 public uint Age=18; // 老师年龄 public string Phone; // 老师电话 public string Address; // 老师通讯地址 public void Eat() {     Console.WriteLine("老师每天中午回家吃饭!"); }

public Teacher() { this.Name="张三"; } }

这段代码会发生编译错误。定义变量Age时初始化,违反了结构中不能有实例字段初始值设定项的规定。又定义了无参数构造函数,违反了结构不能包含显示无参构造函数的规定。解决方法就是将构造函数改成带参数构造函数。

注意:在结构中不写构造函数,或者写带参数构造函数,这与类的定义是不一样的。定义结构时,数据字段不能赋初值,而类是可以的。

using System; struct Teacher { public string Name; // 老师姓名 public uint Age; // 老师年龄 public string Phone; // 老师电话 public string Address; // 老师通讯地址 public void Eat() {     Console.WriteLine("老师每天下午回家吃饭!"); } public Teacher(string name, uint age, string phone, string address) {     this.Name = name;     this.Age = age;     this.Phone = phone;     this.Address = address;

} }

class Test { public static void Main() {     Teacher t = new Teacher("小刘", 35, "13381335310", "北京大学");       //通过构造函数重载实例化结构对象

    Console.WriteLine("该老师姓名={0},年龄={1},电话={2},通讯地址={3}", t.Name,       t.Age, t.Phone, t.Address);     t.Eat(); } }

关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    104724博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0487s