我有一个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; }
}
你存储在你的readonly
字段是一个参考。当然,该引用是只读的并且从未改变。但其内容引用的对象仍然可以改变。
Since Product
似乎是一个数据保存类,一种方法可能是将内容简单地复制到新实例中:
public class Store
{
private readonly Product product;
public Store(Product product)
{
// Create a new Product instance that only this Store instance
// knows about
this.product = new Product { Name = product.Name };
}
}
现在的内容是Store.product
只要您不导出此实例,就无法从外部更改。
但请注意该代码inside the Store
类也许仍然可以改变内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)