gpt4 book ai didi

c# - 在结构中更改各种值(它们有多不可变?)

转载 作者:行者123 更新时间:2023-11-30 18:40:20 25 4
gpt4 key购买 nike

我广泛阅读了有关结构体的资料,并且非常了解您将在何处使用它们。有一件事让我感到困扰,无论我读了多少,我都不明白结构的不变性。

我知道,就像字符串一样,如果您更改它们,您实际上会在内存中创建一个全新的对象,但这是否也适用于结构内的值。例如:

public struct SomeValues
{
public int AnInt;
public float AFloat;
public string AString;
}
public SomeValues[] ArrayOfValues;
private void SomeFunctionThatRunsContinuously()
{
/*so for every value I change, do I essentially create a whole new instance
of SomeValues?*/

for (int i = 0; i < ArrayOfValues.Length; i++)
{
//Is this another struct?
ArrayOfValues[i].AnInt++;

//And then another again?
ArrayOfValues[i].AFloat += 0.33f;

/*I realise adding letters to a string is a horrible idea
-- but is it WORSE to do it in a struct?*/

ArrayOfValues[i].AString += "s";
}
}

例如,如果我有一个结构,例如保存 3D/2D 空间内每个人的坐标(给出坐标作为何时使用结构的示例),并且人的位置发生变化并且在两个/三个 int 结构中更新,可能来自一个数组,创建新结构是因为它们是不可变的吗?

最佳答案

默认情况下,结构不是是不可变的,设计结构使其表现为不可变是一个非常好的主意。

所以对于不可变的结构/类:

  • 不要使用公共(public)字段,而是使用没有公共(public) setter 的属性。私有(private) setter 很好,设置支持字段(从构造函数)也很好。
  • 只允许通过构造函数设置值。
  • 似乎修改您的结构的方法应该修改它,它们应该返回一个新实例(想想 DateTime.AddYears)。

关于c# - 在结构中更改各种值(它们有多不可变?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445221/

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