Coding style 使用IDisposable作为编码标准是个坏主意吗

Coding style 使用IDisposable作为编码标准是个坏主意吗,coding-style,idisposable,Coding Style,Idisposable,我喜欢“使用”结构。我喜欢在退出时它定义的所有变量都超出范围。我从造型的角度喜欢它。当查看代码时,它告诉我它正在使用这个对象,现在它已经完成了。我一眼就知道这个对象在代码的其他地方没有使用过。它把所有东西都包在一个整洁的包裹里。我喜欢它自动为我调用dispose的方式 考虑到这些细节,我正在考虑在我编写的每个类上使用IDisposable,即使它没有可管理的资源。这对我来说是完全错误的,但我没有拿出具体的理由来解释为什么我不应该这样做。在没有必要的情况下使用IDisposable是否会产生开销?

我喜欢“使用”结构。我喜欢在退出时它定义的所有变量都超出范围。我从造型的角度喜欢它。当查看代码时,它告诉我它正在使用这个对象,现在它已经完成了。我一眼就知道这个对象在代码的其他地方没有使用过。它把所有东西都包在一个整洁的包裹里。我喜欢它自动为我调用dispose的方式

考虑到这些细节,我正在考虑在我编写的每个类上使用IDisposable,即使它没有可管理的资源。这对我来说是完全错误的,但我没有拿出具体的理由来解释为什么我不应该这样做。在没有必要的情况下使用IDisposable是否会产生开销?还有其他事情我没有想清楚吗

简而言之,我的问题是,在不需要IDisposable的情况下,实现IDisposable有哪些缺点?

不要这样做。 实现
IDisposable
会告诉看到该类的人该类需要清理

您需要的是普通变量范围;只需使用普通范围块:

{
    int x;
    ...
}
// Cannot use x

.Net代码通常是托管代码。内存管理是为我们处理的


实现IDisposable接口表明我们必须管理一些资源,例如数据库连接或文件流。

类或接口只应实现
IDisposable
当且仅当请求创建新实例的方法应负责确保在未首先调用
Dispose
的情况下不会放弃实例。请注意,即使某个类型没有清理责任,如果将该类型用作其返回值的工厂方法有时可能创建具有清理责任的对象,则此条件也可能适用。例如,即使99%的
IEnumerator
实现没有任何需要清理的内容,
IEnumerator
实现
IDisposable
,因为调用
GetEnumerator()的代码
IEnumerable
的任意实现上,有时会收到需要清理的
IEnumerator
实现。调用
GetEnumerator()
的代码更容易无条件地确保调用其
Dispose
方法,而不是由代码确定是否需要
Dispose


使用
IDisposable
对象和
使用
来创建作用域行为并没有什么错,但是类型应该只在满足某些有用目的的情况下实现
IDisposable
。如果类型的
Dispose
方法不打算做任何事情,则不应使用
use

再简洁不过了,+1。