我有一个关于结构的观察.当我在Struct中声明一个属性,如果我没有初始化Struct那么它给我下面的错误 - "使用未分配的局部变量empStruct"
PSeduo代码 -
struct EmpStruct
{
private int firstNumber;
public int FirstNumber
{
get { return firstNumber; }
set { firstNumber = value; }
}
public int SecondNumber;
}
Run Code Online (Sandbox Code Playgroud)
Program.cs-
EmpStruct empStruct;
empStruct.FirstNumber = 5;
Run Code Online (Sandbox Code Playgroud)
但是当我声明公共变量时,上面的代码就可以了.
EmpStruct empStruct;
empStruct.SecondNumber;
Run Code Online (Sandbox Code Playgroud)
所以我的问题是为什么编译器在我尝试访问变量时不会出错.(如果是Class,它会给出错误).
jas*_*son 12
这个帖子里有很多混乱.
原理是:struct在明确分配a实例的所有字段之前,不能在实例上调用任何属性或方法.
这就是你的第一个代码块无法编译的原因.您正在访问一个属性,而没有明确分配所有字段.
第二个代码块编译,因为可以访问一个字段而没有明确分配所有字段.
确定分配a的一种方法struct是说
EmpStruct empStruct = new EmpStruct();
Run Code Online (Sandbox Code Playgroud)
这将调用默认的无参数构造函数,EmpStruct该构造函数肯定会分配所有字段.
规范的相关部分是关于定义分配的§5.3.并且来自§11.3.8中的示例
在构造的结构的所有字段都已明确赋值之前,不能调用实例成员函数(包括属性的集合访问器
X和Y).
如果编译器错误消息是沿着这条线的话,那会更有帮助(嗯,Eric Lippert!)
使用未明确分配的局部变量
empStruct.
现在,请注意您已定义了一个可变结构.这是危险的,也是邪恶的.你不应该这样做.取而代之的是,将一个公共的构造函数,可以让你绝对分配firstNumber和secondNumber,并从公共二传手EmpStruct.FirstNumber.
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |