第三部分 类和结构6---------------

与类一样,结构可以包含其他类型.结构有时被称为类的轻型版本,因为结构在内部是值类型的.因此,结构不承担引用对象(比如类)所带来的开销,但在被装箱时除外.结构有一些重要的限制,这使她们只能用于非常特殊的场合.

定义结构的语法几乎与定义类是完全一样的:

  [attributes][modifiers] struct <structName>[:interfaces]

    {

                [struct-body]

  } [:]

例如,下面定义了一个标准的RGB结构,其中有包含红、绿和蓝值的字段:

struct RGB

{

 public int Red;

 public int Green;

 public int Blue;

}

到目前为止,这个声明很象一个类。但是,你马上就会看到前面提到的在使用结构方面的许多限制。现在,我们来看看客户是如何使用这个结构的:

RGB rgb;

rgb.Red=0xFF;

rgb.Green=0xFF;

rgb.Blue=0xFF;

注意,客户不必对结构进行实例化(通过new 关键字).这是因为,作为一种值类型,结构一旦被声明,就被分配.这种用法显然与引用类型相反,引用类型需要进行实例化才能使用。但是要记住,因为有了这种用法,所以如果不亲自对结构的成员进行显示的初始化(使用new关键字),那么字段就不会被初始化.所以,以下代码无法编译,因为它试图使用一个未初始化的值:

RGB rgb;//ERROR :Use of unassigned field

Console.WriteLine(rgb.Red);

以下代码纠正了这个错误.注意,因为RGB.Red是一个值类型,所以初始化为0.

RGB rgb=new RGB();

Console.WriteLine(rgb.Red);

尽管我的RGB结构只包含字段,但是结构的成员可以是构造器、常量、字段、方法、特性、索引器、操作符以及嵌套的类型.但是,在构造器方面,结构有一个非常重要的限制,不能为结构创建无参数的构造器.因此,以下代码将产生编译时错误:

    struct RGB

   {

            //ERROR:Structs cannot contain explicit

           //parameterless constructors

          public RGB();

          public int Red;

          public int Green;

         public int Blue;

}

尽管不能为结构定义显示的无参数构造器,但是以下定义是合法的:

struct RGB

   {

        public RGB(int red,int green,int blue)

         {

                           Red=red;

                          Green=green;

                         Blue=blue;

        }

 public int Red;

 public int Green;

 public int Blue;

  }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值