黑马程序员技术交流社区

标题: 在C#的结构为什么不能实例化字段 [打印本页]

作者: hou1989    时间: 2013-1-10 17:14
标题: 在C#的结构为什么不能实例化字段
本帖最后由 hou1989 于 2013-1-11 10:58 编辑

在C#的结构为什么不能实例化字段,如下:
struct Simple
{
       public int x=10;
       public int y=20;
}

这样做,为什么编译错误

作者: 林嘉健    时间: 2013-1-10 17:37
因为在结构体的实例字段只能在构造函数中进行初始化,而不能使用赋值的方法。

例子:

struct Simple
    {
        public int x;
        public int y;
        public Simple(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }
作者: 王晨    时间: 2013-1-10 18:58
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化;还有结构不能声明默认构造函数(没有参数的构造函数)或

析构函数。
作者: 甘家利    时间: 2013-1-10 22:31
结构中不能给字段赋初始值
作者: 乔培培    时间: 2013-1-11 10:06
本帖最后由 乔培培 于 2013-1-11 10:09 编辑

藤椅上那位仁兄总结得很好
“在结构声明中,除非字段被声明为 const 或 static,否则无法初始化;
还有结构不能声明默认构造函数(没有参数的构造函数)或析构函数。”
出现这样的结果就是因为结构体是值类型,而类是引用类型,这是两者的一个区别
值类型就意味着它存在于栈区,它传递的是值,而不是引用
如果字段直接赋值在结构体中,这就等于说在实例化的时候,对象可以使用这个字段的引用,而这是不允许的!
那为什么使用const和static就可以呢,因为使用了const和static之后这个字段就不再属于结构体了
。。。。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2