C#数据类型-结构类型

有时我们可能对同一事物使用多个不同的变量来描述,如果将其分开来,显得不够灵活。结构类型很好的解决了这个问题,它把多个不同的变量组织在一起。结构和类有很多相同的地方,结构可以看成一个轻量的类。结构使用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();
}
}

posted on 2012-06-26 13:19  流星落  阅读(616)  评论(0编辑  收藏  举报

导航