|
|
1
18
你不能那样做。内存管理并不是专门为适应非内存资源而构建的。 IDisposable模式是为开发人员设计的一种方法,用于告诉对象什么时候完成了它,而不是让内存管理人员试图通过使用引用计数之类的方法来解决这个问题。 对于无法正确处理对象的用户,可以使用终结器作为回退,但它不如用于清理对象的主要方法工作得好。为了顺利工作,应该正确地处理对象,这样就不需要调用成本更高的终结器。 |
|
|
2
46
应提出几个要点来解决OP的问题:
Finalizer: 一些开发人员将其称为析构函数。 实际上,它甚至在 C# 4.0 Language Spec (section 1.6.7.6) 而在 以前的 当前版本 ECMA-334 spec . 幸运的是,第4版(2006年6月)在第8.7.9节中正确定义了终结器,并试图澄清第17.12节中两者之间的混淆。应该注意的是,传统上称为析构函数和.NET框架中的析构函数/终结器之间存在重要的内部差异(这里不需要讨论这些可怕的细节)。
定稿: 终结是.NET框架处理“优雅”清理和释放资源的方法。
虽然这当然是您所要求的更多信息,但它提供了关于事情如何工作以及它们为什么以这种方式工作的背景。有些人会争辩说,他们不必担心在.NET中管理内存和资源,但这并不能改变需要做的事实-我不认为这在不久的将来会消失。 |
|
|
3
13
所有答案(或多或少)都是正确的,下面是一个例子:
手动呼叫
如果有人“忘记”使用IDisposable接口,您可以添加一个处理资源处置的终结器:
见
this question
更多信息。但是,这只是对那些没有正确使用你的类的人的补偿:)我建议你增加一个大脂肪
如果您选择实现模式,您将看到
|
|
|
4
7
将其用作类的模式/模板
当然,正如别人提到的,不要忘记
|
|
|
5
2
你得打电话
使用
|
|
|
6
1
你应该自己处理它,或者打电话给
如果您不能信任类的用户正确地处理资源,那么他们很可能会以其他方式搞砸。 |
|
|
7
1
不会自动调用Dispose。你需要使用
见 http://msdn.microsoft.com/en-us/library/aa664736%28VS.71%29.aspx
为了先发制人,你可能有另一个想法:你不能打电话给
|
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |