我可以设置一些东西让一个类在卸载时做一些事情

时间:2015-01-25 01:52:30

标签: c#

如果我有课,

class order()
{
    int orderId {get;set;}
    double total {get;set;}
    public order(){}
    ...
}

是否有一些我可以重载的内容,以便c#每次卸载时都会执行某些操作,而不是告诉它我希望它能完成?

   static void Main(string[] args)
        {
            Order activeOrder = new Order();
            // do stuff to the order
            activeOrder = new Order(); <---- Automatically commit any changes to the order, since I am starting a new one. 
        }

2 个答案:

答案 0 :(得分:2)

你所问的并不是真的有意义。当您为Order变量分配新的activeOrder实例时,第一个Order实例不会被卸载&#34;。它只有资格进行垃圾收集(除非它也在其他地方引用)。这意味着下次GC运行时,将收集实例,如果已定义,则终结器将运行。问题在于它完全不确定:你不知道GC何时会运行。

Order类无法检测到变量是否已分配新实例。你所能做的就是写一个终结者,但既然你不知道它什么时候会运行,那可能不是一个好主意。当您使用当前Order时,您应该明确提交更改。

答案 1 :(得分:1)

除了线程安全:

class Order()
{
  static Order instance;

  int orderId {get;set;}
  double total {get;set;}
  public Order()
  {
    if (instance != null)
      instance.Unload();
    instance = this;
  }
  ...
  public Unload()
  {
  }
}

这仍然存在一个问题,即谁将卸载Order的最后一个实例。