gpt4 book ai didi

C# 基本类型(double、int 等)和 Struct 差异

转载 作者:太空宇宙 更新时间:2023-11-03 17:35:16 25 4
gpt4 key购买 nike

我对结构感到困惑。

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.
}
}

现在为什么我可以设置结构 a 的值,而不是结构字段 b 的值?我读到的答案是我有一份 b 而不是 b 的支持字段。按照同样的逻辑,我必须有一个 a 的副本,而不是 a,所以它如何解释 a 属性在允许的赋值之后被更改

a = 1.0;

?谢谢。

编辑:
此外,为了仍然在 A 类中使用 b,通过 set 和 get 方法“过滤”而不是直接通过使用支持字段 _b,它可能看起来像这样:

MyStruct _b;
MyStruct b { get { return _b; } set { _b=value; } }

然后使用字段

_b

,正如答案中正确指出的那样,我想到了一种将属性“包装”在大小为 1 的一维数组中的愚蠢方法。

MyStruct[] b { get; set; }

有点用类包装结构。我不知道这样做的计算成本,但我更喜欢直接在 A 类中使用该字段。

已回答:好的,当您在脑海中习惯于将属性解释为字段时,这个问题就会出现混淆。如果您以正确的方式解释属性 -如 MsIL 所做的那样-,一切都会安定下来。下面的所有答案和评论都是相关的。(抱歉英语不好。)

最佳答案

你在做两件不同的事情。这是在两个地方做相同事情的例子:

a = 1.0;
b = new MyStruct(2.0);

在这两种情况下,赋值运算符都在调用属性的“setter”。您可以将其视为:

this.SetA(1.0);
this.SetB(new MyStruct(2.0));

作为一个更复杂的例子,如果你写:

a = a + 1.0;

相当于:

this.SetA(1.0 + this.GetA());

关于C# 基本类型(double、int 等)和 Struct 差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4736247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com