我们可以在不实现IDisposable接口的情况下使用Dispose方法吗?
答案 0 :(得分:2)
您可以将方法命名为Dispose
,并将其作为普通方法使用,不受任何限制:
public class MyClass {
public void Dispose() {
...
}
}
...
// using() emulation
MyClass m = null;
try {
m = new MyClass();
...
}
finally {
if (m != null)
m.Dispose();
}
但如果您需要using()
语法,则必须实施IDisposable
:
public class MyNextClass: IDisposable {
protected virtual void Dispose(Boolean disposing) {
...
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
}
...
// compare this with the using() emulation in the code above
using (MyNextClass n = new MyNextClass()) {
...
}
无论如何,即使是可能来命名方法Dispose
赞成也不是一个好习惯(并且最终会激怒阅读文本的开发人员(包括您);所以实现 IDisposable
或者为方法找到其他名称。
答案 1 :(得分:0)
即使您没有实现IDisposable
,也会自动处理托管对象,IDisposable允许您处置哪个运行时不会像文件一样处置,打开处理非托管代码组件。
处理对象的模式,称为配置模式, 对物体的寿命施加顺序。处置模式是 仅用于访问非托管资源的对象,例如文件 和管道句柄,注册表句柄,等待句柄或指向 非托管内存块。这是因为垃圾收集器 回收未使用的托管对象非常有效,但它无法使用 收回非托管对象。
如果您不想使用IDisposable模式并希望拥有自己的模式,那么我认为这不是推荐的方式,因为它必须发现使用IDisposable可以显而易见。
答案 2 :(得分:0)
没有人会阻止你这样做,但设计非常糟糕,因为每个人都知道idisposable接口。如果您对此方法赋予不同的含义,那么您将设计混淆为以后查看代码的人。也许甚至在几年之后你就不记得你为什么这么做了。