C# 的 Finalize()方法一种是:
class a
{
~a()
{
}
}一种是:
class a
{
public void Finalize()
{
}
}到底是 ~a() 还是 Finalize() ?两者有什么区别?还有 Dispose() 和 Close() 又有什么区别?谢谢。
class a
{
~a()
{
}
}一种是:
class a
{
public void Finalize()
{
}
}到底是 ~a() 还是 Finalize() ?两者有什么区别?还有 Dispose() 和 Close() 又有什么区别?谢谢。
解决方案 »
- 两个窗口之间传递的问题~~~~~~~新手请教~~~~~~
- aspx页面的“最小化”按钮如何 最小化 winform 窗口程序
- winform中,treeview节点状态设置不同图标的问题
- 如何监控office启动,然后触发事件
- “System.Data.SqlClient.SqlException”类型的异常
- Socket端口监听无法关闭,那位高人给指点1and2
- 有关加密的问题!
- 两个页面之间搜索的问题
- 如何用正则获取一串字符串里的数字
- 最简单最初级的问题
- 在vs2005中,用DATAGRIDVIEW显示数据库中数据,然后又新加一列COLUMN(数据库中无此列),请教大家!
- [*Access数据库连接问题*]为什么在VB6下可以连接,在C#.net下就不行呢,谁能给个连接串啊.
~a()和Finalize()是一样的 他们会生成相同的IL中间语言Close 以后,这个实例还在,只不过被标记成了dispose,等待下次启动垃圾收集的时候清除掉。
---
一般是一样的,在特定类里面有不同效果。有些类没有Close方法,如果有Close方法的类,一般调用Close方法。
是的,比如数据库连接对象,一般应调用Close方法而不要Dispose
Close方法是释放到连接池,并不会销毁对象
{
/*~a()
{
Console.WriteLine("~bye");
}*/ public void Finalize()
{
Console.WriteLine("bye");
}
}class mycls
{
public static void Main(string[] v)
{
a a0=new a();
a a1=new a();
a0=a1;
}
}1 在使用 ~a()时,代码运行结束后会显示 "~bye"2 但在使用 Finalize() 时,代码运行结束后没有显示 "bye"请问如果 ~a() 和 Finalize() 相同,为何两者行为不同?
Finalize() cil managed
{
// Code size 25 (0x19)
.maxstack 1
.try
{
IL_0000: nop
IL_0001: ldstr "~bye"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: nop
IL_000d: leave.s IL_0017
} // end .try
finally
{
IL_000f: ldarg.0
IL_0010: call instance void [mscorlib]System.Object::Finalize()
IL_0015: nop
IL_0016: endfinally
} // end handler
IL_0017: nop
IL_0018: ret
} // end of method a::Finalize
Finalize() :.method public hidebysig instance void Finalize() cil managed
{
// Code size 13 (0xd)
.maxstack 8
IL_0000: nop
IL_0001: ldstr "bye"
IL_0006: call void [mscorlib]System.Console::WriteLine(string)
IL_000b: nop
IL_000c: ret
} // end of method a::Finalize
看看这个