如果我有课,
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.
}
答案 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
的最后一个实例。