每个实例销毁对象

本文关键字:对象 实例 | 更新日期: 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;
}

VolumeWeight是两个字段的简单类

每个实例销毁对象

首先,需要销毁什么?这是在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(只要VolumeWeight是引用类型而不是结构体),并且任何对错误类型的引用都会抛出异常。

只要Measurement对象在作用域中,垃圾收集器就不能收集非必需的类型,因为它将在Measurement实例的作用域中,并且理论上可以随时创建,无论您在现实中的实际意图如何。

如果对象实现了IDisposable,您应该调用它们的Dispose方法,并确保它们不会被再次引用或处置。

Dispose -ing之后(如果需要),您可以将未使用的对象设置为null

  1. 参考:http://blog.stephencleary.com/2010/02/q-should-i-set-variables-to-null-to.html