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() 又有什么区别?谢谢。
解决方案 »
- c#中如何将float[]转换为Byte[]
- .NET2005 连Oracle的问题
- c#中radioButton控件
- 求一简单的正则表达式
- 高手帮忙,谢谢!
- 显示问题!来哦
- 请问DataList显示图片这样写有错吗,我怎么就是显示不出图片?(是Web)
- 300分求一简单问题!!!
- 求教 c++部分代码相对应的c#里的代码怎么写~
- 完全支持.Net的DirectX 9.0 RC0出了,有没有人玩过的?
- 在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
看看这个