2 回答
TA贡献1876条经验 获得超5个赞
这不是同样的问题
Dispose()
吗?
有点,但不是全部。具体来说,“然后其自身的清理将失败”是可能的,但不太可能,因为Dispose()
必须安全地在同一对象上多次调用,并且在同一对象的不同副本上多次调用通常不是问题。
如果结构不能有终结器,为什么要允许它们实现
IDisposable
?
允许它是自然行为;它为语言提供了更简单的规则。由于这不是程序员可能会偶然出错的东西,因此在编译器中编写额外的代码来拒绝这样做的好处很小。
Jeroen Mostert补充说,它甚至可以使结构实现很有意义IDisposable
:
IDisposable
可能只是因为它是其他一些代码的要求而Dispose()
实现的,即使在此特定类型上实现绝对不会做任何事情。在这种情况下,不存在意外调用其他副本的风险。这样的一个例子是当一个struct实现时IEnumerator<T>
,IEnumerator<T>
反过来又实现了IDisposable
。
TA贡献1786条经验 获得超13个赞
因为IDisposable
只是一个接口。没有特殊处理。结构可以实现接口,因此可以实现IDisposable
。
但是,这并不意味着没有任何意义。目的IDisposable
是释放非托管资源。结构体可以引用非托管资源,而引用将受益于Dispose
(不必说,引用本身应实现IDisposable
并具有终结器)。
作为奖励,Dispose
通常被用作using
模式的一部分。您只为using块创建实例,并保持引用直到Dispose
,没有任何怪异。确实,没有理由禁止这样做。
- 2 回答
- 0 关注
- 108 浏览
添加回答
举报