【发布时间】:2013-01-22 19:28:41
【问题描述】:
我有一个结构和一个类
public class MyClass
{
public string name;
}
public struct MyStructure
{
public MyClass classValue;
public int intValue;
public MyStructure(MyClass classValue, int intValue)
{
this.classValue = classValue;
this.intValue = intValue;
}
}
我在其他地方写了以下代码:
MyClass class1 = new MyClass() { name = "AA" };
MyStructure struct1 = new MyStructure(class1, 4);
MyStructure struct2 = struct1;
struct1.classValue.name = "BB"; //struct2.classValue.name also change!
在这种情况下,如何确保结构的每个引用类型成员都按值复制?
【问题讨论】:
-
struct不是myStructure的好选择。这就是问题的根源。 -
@HenkHolterman 是正确的。为什么你想要
struct语义呢?使用structs 有充分的理由,但情况非常具体。 -
@HenkHolterman 也许你应该解释一下为什么你认为
MyStructure不应该是struct。它由一个对象引用和一个Int32组成。正如它所写的那样,它是一个可变的struct,但这与问题无关。它可以变得不可变。KeyValuePair<int, MyClass>也有同样的行为,struct。 -
@ChristopherPfohl 更改为
class对他有帮助吗?不。他似乎想要一个深拷贝,而struct并没有给他那个。一个类甚至没有给他一个浅拷贝(它只是给同一个对象一个新的引用),所以它并没有真正接近他想要的。听起来他选择了struct,因为他想要按值复制的语义。这就是选择struct的正当理由。
标签: c# value-type reference-type