goo*_*ate 2 .net c# com dispose using-statement
什么是更好的,使用指令,或完成对象时的dispose指令?
using(FileStream fileStream = new FileStream(
"logs/myapp.log",
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
using(StreamReader streamReader = new StreamReader(fileStream))
{
this.textBoxLogs.Text = streamReader.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
另一方面,当我正在处理System.Net.Mail时,我被告知我需要对象的Dispose()来释放任何杂散锁.
有没有一致的指导?如何判断在给定对象的特定情况下哪些更合适?
using 语句(非指令)涉及对Dispose()finally块的隐式调用.所以这里没有矛盾.你能链接到那个讨论吗?
官方的定义
using (x) { ... }
是
try ... finally if (x != null) x.Dispose(); }
什么是更好的?
从符号的角度来看,using() { }块.从技术上讲,它们是一样的.
这是同一件事.用法很简单,如果您创建对象并仅在一个方法中使用它,则使用using.如果你需要在方法调用之外保持活着,那么你必须使用Dispose().
COM对象的运行时可调用包装器没有Dispose()方法.
当你可以在一个块中包装一个对象时Dispose(),除了在另一个实现中Dispose()(例如在你创建的实现的类中IDisposable),我没有理由手动调用using.在使用块使对象的创建和处理在一个try/catch/finally块来几乎 gaurantee该对象将被正确处理.
编译器比我更可靠.或者您.=)
MSDN记录了using语句并调出了可以获取C#语言规范的位置,您可以在其中查看第8.13节"使用语句"(至少在v4.0参考中它是8.13),它给出了using语句的全面解释以及如何使用它.第五段给出以下内容:
使用声明分为三个部分:获取,使用和处置.资源的使用隐式包含在包含finally子句的try语句中.这个finally子句处理资源.如果获取了空资源,则不会调用Dispose,也不会抛出异常.