winform窗体中调用this.dispose()与窗体关闭的时候调用designer.cs中的Dispose(bool disposing) 作用有什么区别?
作用是否一样,一样的话单独调用this.dispose()就没有意义了,如果不一样的话,他们起的作用有什么区别?
没什么区别,你可以在form cs里面的看到调用,并且判定了dispose标志。实际上组建类,你不调用,只要去实现了都没问题。
—— 补充一下,基于form等容器管理哈。
比如你自己的类那就只能手动了。
@花飘水流兮: 考虑的范围,目前只限于winform窗体。
@花飘水流兮: 不是很明白,你什么意思,1:form.cs 中调用的时候,是入参为空的this.Dispose(),designer.cs中的Dispose(bool disposing),是带了入参的,是同一个函数还是两个不同的函数?2:designer.cs中的Dispose(bool disposing)不是我去实现的,是新建窗体的时候,自动生成的,能不能帮我解答一下这两个问题;还有想在窗体关闭的时候,将托管的资源和非托管的资源都释放干干净净的,该怎么做呢?GC 只回收托管的资源。
@小徐的日记本:
Component:
public void Dispose()
{
this.Dispose(true);
GC.SuppressFinalize((object) this);
}
Form:
public void Close()
{
if (this.GetState(262144))
throw new InvalidOperationException(SR.GetString("ClosingWhileCreatingHandle", new object[1]
{
(object) "Close"
}));
if (this.IsHandleCreated)
{
this.closeReason = CloseReason.UserClosing;
this.SendMessage(16, 0, 0);
}
else
this.Dispose();
}
明白没,不清楚就多看源码,如果都不能自动管理之类的,那么ms定义一个接口在这就没有意义,他们又不是菜鸟不会干这种事的。
使用dispose模式(就你问题中提到的一个没有参数的dispose和一个有参数的dispose)在一些包含析构函数的地方是作为标准的一种实现,同时保证了正常使用时可以释放托管/非托管资源,也可以保证在未调用但已经被GC认为是垃圾后执行析构函数对非托管资源的释放。
winform中没怎么了解过,但其实现的也就上面这些东西了。