Class AND Struct (2)

接上上篇文章,这章我们看实战代码

 

Question:

首先 struct是一个结构 那么可以这样使用


struct MyStruct

{
    public int a;
}

MyStruct struct;
struct.a = 1;            //编译通过,符合struct不用new的说法


Rectangle rc;     //Rectangle也是一个Struct啊,我还是不用new
rc.X = 1;        //Error,编译失败。  使用了未赋值的局部变量“rc”为什么???

 

answer:

 

 

之前说的这句,那在初始化所有字段之前,字段将保持未赋值状态,且对象不可用。没有错。因为对于rectangle结构体中,其x为字段(即属性)定义方式。故未对rectangle进行new之前,是未赋值的。而自定义的MyStruct,是使用Public变量的方式,系统在编译时,自动默认已经给初始化了。故你可以直接进行赋值,不会报错。对于非标准属性赋值,编译器会自动添加上默认值。
  • 如果把MyStruct改为,struct MyStruct{ private int a; public int x { get { return this.a; } set { this.a = value; } } } 这时候再对于MyStruct a; a.x=0;就会报与rectangle一样的错误。故rectangle r; r.x=0会报错。

 

 


 

posted @ 2011-03-12 23:42  王海龙(Heaven)  阅读(234)  评论(0编辑  收藏  举报