我对结构感到困惑.
class A
{
double a { get; set; }
MyStruct b { get; set; }
void Modify()
{
a = 1.0; // This compiles.
b.c = 2.0; // Assuming c is a double. This gives the known error.
}
}
Run Code Online (Sandbox Code Playgroud)
为什么我能够设置结构a的值,而不是结构的字段b?我读到的答案是我有一份b而不是b的支持字段.按照同样的逻辑,我必须有a的副本,而不是a,所以如何解释a属性在允许的分配后被更改
a = 1.0;
Run Code Online (Sandbox Code Playgroud)
?谢谢.
编辑:
另外为了仍然在A类中使用b,通过set和get方法"过滤"而不是直接使用支持字段_b,这可能是这样的:
MyStruct _b;
MyStruct b { get { return _b; } set { _b=value; } }
Run Code Online (Sandbox Code Playgroud)
然后使用该字段
_b
Run Code Online (Sandbox Code Playgroud)
正如在答案中正确陈述的那样,我想到了一个愚蠢的方法来将属性"包装"在一个大小为1的一维数组中.
MyStruct[] b { get; set; }
Run Code Online (Sandbox Code Playgroud)
用类包装结构.我不知道这个的计算成本,但我更喜欢直接使用A类中的字段.
回答:好的,当你习惯将属性解释为你脑海中的字段时,这个问题就会出现混乱.如果你以正确的方式解释属性 …