询问者
构造值类型时,new操作符的用法?

问题
-
在引用类型中,new操作符一般是实例化一个对象。但是,在值类型中,new操作符又是什么作用呢?
据我了解,在引用类型中,一般new操作符调用的该类型的无参构造函数。
但是,值类型是没有无参构造函数的,有一些书说编译器隐式的为值类型创建了无参构造函数,可是我在CLR via C#中查阅,里面说到编译器根本不会为值类型构造无参构造函数,用IL工具查看IL代码,确实也没有发现无参构造函数。
那没有无参构造函数,SomeVal val = new SomeVal();(SimeVal为值类型)中的new起了什么作用?
看到IL代码是
initobj '值类型和引用类型'.SomeVal
难道这里的new,只起到了初始化数据的作用?
请各位朋友解解惑!谢谢!
全部回复
-
建议你参看以下这个博客:
http://www.cnblogs.com/xuefeng1982/archive/2009/02/21/1395493.html
有两段我摘抄下来了:
“C#编译器是否会为值类型生成默认的构造函数呢?
答案是否定的,C#编译器并不会为值生成默认的构造函数的,这样设计一方面是基于性能方面的考虑,另外一个原因是值类型可以被隐式的创建!这一点可以通过ILDasm工具开验证,值类型确实没有生成默认的构造函数"
然后请参照这里这里 http://msdn.microsoft.com/zh-cn/library/saxz13w4.aspx
<sentencetext xmlns="http://www.w3.org/1999/xhtml">结构不能声明默认构造函数(没有参数的构造函数)或析构函数。</sentencetext> 而结构本身就是值类型,所以”编译器隐式的为值类型创建了无参构造函数“应该是不对的。
Barry Wang
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click HERE to participate the survey. -
我个人意见以为:
1)代码(语法糖)方面:确实提供了无参构造函数,而且不允许你显示地去写。
2)编译器方面:确实没有提供显示的构造函数。
ASP.NET Forum
Other Discussion Forums
FreeRice Donate
Issues to report
Free Tech Books Search and Download