对于一个类,这没关系:
class Point
{
private int _x, _y;
public Point(int x)
{
_x = x;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用值类型,编译器会抱怨_y
未初始化:
struct Point
{
private int _x, _y;
public Point(int x)
{
_x = x;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道这背后的理由是什么?为什么不能编译器只是初始化_y
到0
时候有没有提供明确的构造,因为它呢?
为什么?因为语言规范(ECMA 334 16.4.9)这样说:
在构造的结构的所有字段都已明确赋值之前,不能调用实例函数成员(包括属性X和Y的集合访问器).但请注意,如果Point是类而不是结构,则允许实例构造函数实现.
至于为什么语言规范要求它...大概是通过避免不必要的擦除和覆盖来使结构分配尽可能便宜.
归档时间: |
|
查看次数: |
72 次 |
最近记录: |