【发布时间】:2018-05-28 19:57:27
【问题描述】:
我有一个通过构造函数参数设置的readonly 对象字段。如果我修改对象,类内的字段也会改变,我猜是引用调用。有什么方法可以更好地/防止它吗?
private void Form1_Load(object sender, EventArgs e)
{
Product p = new Product() { Name="New" };
Store s = new Store(p);
p.Name = "MODIFY!";
MessageBox.Show(s.Show());//MODIFY!
}
public class Store
{
private readonly Product product;
public Store(Product product)
{
this.product = product;
}
public string Show()
{
return this.product.Name;
}
}
public class Product
{
public string Name { get; set; }
}
【问题讨论】:
-
声明变量为
const -
@SouvikGhosh 引用类型字段不能标记为
const,除非分配了空引用,这与这里的观点相悖。 -
不管是什么解决方案,除了 const 之外的任何东西都可以通过反射来改变。其他一切都只是编译器规则。
-
readonly是 shallow 不变性(仅适用于它所应用的变量)。我认为您正在寻找的是 deep 不变性(递归地应用于它所应用的变量和引用类型的任何字段),这目前不能作为语言功能使用。跨度>
标签: c#