A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hou1989 黑马帝   /  2013-1-10 17:14  /  4279 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 hou1989 于 2013-1-11 10:58 编辑

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

这样做,为什么编译错误

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

4 个回复

倒序浏览
因为在结构体的实例字段只能在构造函数中进行初始化,而不能使用赋值的方法。

例子:

struct Simple
    {
        public int x;
        public int y;
        public Simple(int x, int y)
        {
            this.x = x;
            this.y = y;
        }
    }

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
在结构声明中,除非字段被声明为 const 或 static,否则无法初始化;还有结构不能声明默认构造函数(没有参数的构造函数)或

析构函数。

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
结构中不能给字段赋初始值

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 乔培培 于 2013-1-11 10:09 编辑

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


评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马