感觉结构体的成员初始化和赋值非常麻烦,为什么不能像class那样简洁?

septamber 2015-06-12 09:06:45
首先,struct不能声明无参的构造函数, 是因为编译器默认会给我声明一个无参的并初始化成员?
但是这样我感觉更加麻烦了,例如我有:

struct s
{
int m_i ;
short m_s;
}

我必须先初始化一个s obj,然后obj.m_i=3; obj.m_s=2 这样来赋值
不能像class那样,变量声明后面直接给一个初始值。而class是可以这样做的。

所以我不明白的地方是,为什么struct不让我在声明成员变量的时候给个初始值,这样做的好处或者出发点是什么?
看不出来这种限制产生的原因!
...全文
244 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Poopaye 2015-06-12
  • 打赏
  • 举报
回复
为了效率考虑 首先一个类可以给成员初始化,其本质是编译器会为将这些初始化过程插入默认构造函数的起始位置 如果一个结构体也可以写一个默认的构造函数,意味着int,float这些变量也会拥有默认构造函数 向int[] arr = new int[1000]时就需要有1000次的函数调用,这样显然是不愿意看到的
tcmakebest 2015-06-12
  • 打赏
  • 举报
回复
如果要赋初值,写个有参的构造函数就行了。为什么一定要在没有构造函数的情况下,让一些成员自动取了一个业务上有特定意义的值,这种做法是不透明的做法。
Forty2 2015-06-12
  • 打赏
  • 举报
回复
相对class来说,struct是轻量的一种’结构‘,它可以不用’显式‘的初始化。 比如Point points = new Point[2]; MessageBox.Show("x=" + points[0].X); // 可以直接使用,不需要points[0] = new Point()的赋值过程。 ‘不用’显式‘的初始化’,是因为结构有固定的大小,而且根据C#语言规范(11.3.4 Default values),结构成员将初始化为默认值。 ‘不用’显式‘的初始化’‘,也说明了没有人调用结构的自定义初始化,因此obj.m_i=3; 的赋值不能保证得到执行。
皮特胖胖 2015-06-12
  • 打赏
  • 举报
回复
可以直接初始化赋值的,结构体里写个new方法
xuzuning 2015-06-12
  • 打赏
  • 举报
回复
struct 本来就是 C/C++ 语言的一个数据块,C# 将其保留并对其对象化应该是出于无奈 毕竟 C/C++ 程序员习惯于把数据块定义成 struct 而不是 class 如果 C# 丢弃了太多 C/C++ 语法成分的话,C# 就没法与 Java 拼命了
  • 打赏
  • 举报
回复
感觉我基本没用过struct

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧