有没有理由C#/ .NET编译器没有警告Dispose()?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了有没有理由C#/ .NET编译器没有警告Dispose()?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1315字,纯文字阅读大概需要2分钟。
内容图文
![有没有理由C#/ .NET编译器没有警告Dispose()?](/upload/InfoBanner/zyjiaocheng/793/c4cd9a3ac1c54b608dfa2f46f23b10fa.jpg)
我正在编写一些IDisposable代码时,我正在考虑这个问题.
对于开发人员来说,直接调用Dispose()或者如果对象的生命周期允许使用using构造,这是一种很好的做法.
我们需要担心的唯一实例是由于代码的机制而无法使用的实例.但是,在某些时候,我们应该在这些对象上调用Dispose().
鉴于C#编译器知道一个对象实现了IDisposable,理论上它也可以知道Dispose()从未被调用过它(它是一个非常聪明的编译器!).它可能不知道程序员什么时候应该这样做的语义,但它可以作为一个很好的提醒,它永远不会被调用,因为它从未在using构造中使用过,并且方法Dispose()从未被直接调用,任何实现IDisposable的对象.
有什么理由,还是有想法走这条路?
解决方法:
it could theoretically also know that
Dispose()
was never called on it
它可以在某些简单的情况下确定Dispose永远不会被调用.仅基于对代码的静态分析,不可能确定将丢弃所有创建的实例.代码也不需要非常复杂,以达到甚至估计对象是否未被遮挡的程度是直截了当的.
更糟糕的是,不应该处理所有IDisposable对象实例.这可能有很多原因.有时,对象实现IDisposable,即使它们的实例中只有一部分实际上在实现中做了任何事情. (IEnumerator< T>就是一个很好的例子.大量的实现在处理时什么都不做,但有些实现.如果你知道具体的实现,你将不会做什么处理你不能打扰;如果你不知道你需要确保你调用Dispose.
然后有几个类型,如几乎从未真正需要处理的任务. (参见Do I need to dispose of Tasks?.)在绝大多数情况下,您不需要处理它们,并且使用块或处理不执行任何操作的调用会不必要地混乱您的代码会妨碍可读性.
内容总结
以上是互联网集市为您收集整理的有没有理由C#/ .NET编译器没有警告Dispose()?全部内容,希望文章能够帮你解决有没有理由C#/ .NET编译器没有警告Dispose()?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。