每个实例销毁对象
本文关键字:对象 实例 | 更新日期: 2023-09-27 18:15:49
对于我的一个简单问题,有几个更复杂的答案,所以我将根据我的情况问这个问题,因为我不能完全弄清楚基于这些其他答案该怎么做。垃圾收集似乎是一个危险的区域,所以我宁可谨慎行事。
我有一个Measurement
对象,它包含一个Volume
对象和一个Weight
对象。根据使用的构造函数,我希望销毁相反的对象,也就是说,如果用户添加了一个体积度量,我希望消除该实例的weight元素,因为它在那时只是膨胀。应该做些什么?
编辑澄清:
public class RawIngredient
{
public string name { get; set; }
public Measurement measurement;
public RawIngredient(string n, double d, Measurement.VolumeUnits unit)
{
name = n;
measurement.volume.amount = (decimal)d;
measurement.volume.unit = unit;
//I want to get rid of the weight object on this instance of measurement
}
public RawIngredient(string n, double d, Measurement.WeightUnits unit)
{
name = n;
measurement.weight.amount = (decimal)d;
measurement.weight.unit = unit;
//I want to get rid of the volume object on this instance of measurement
}
}
再次编辑显示Measurement
public class Measurement
{
public enum VolumeUnits { tsp, Tbsp, oz, cup, qt, gal }
public enum WeightUnits { oz, lb }
public Volume volume;
public Weight weight;
}
Volume
和Weight
是两个字段的简单类
首先,需要销毁什么?这是在actor中发生的,所以不要创建你不想要的。
class Measurement
{
public Volume Volume {get; set;}
public Weight Weight {get; set;}
public Measurement (Volume v) { Volumme = v; Weight = null;}
public Measurement (Weight w) { Volumme = null; Weight = w;}
}
如果您在Measurement
构造函数中,那么简单地不要创建非必需的类型;它将保持默认值null(只要Volume
和Weight
是引用类型而不是结构体),并且任何对错误类型的引用都会抛出异常。
只要Measurement
对象在作用域中,垃圾收集器就不能收集非必需的类型,因为它将在Measurement
实例的作用域中,并且理论上可以随时创建,无论您在现实中的实际意图如何。
如果对象实现了IDisposable,您应该调用它们的Dispose方法,并确保它们不会被再次引用或处置。
在Dispose
-ing之后(如果需要),您可以将未使用的对象设置为null
。
- 参考:http://blog.stephencleary.com/2010/02/q-should-i-set-variables-to-null-to.html