using(FileStreamfileStream=newFileStream(path)){//dosomething}现在我知道using模式是IDisposable的实现,即设置了Try/Catch/Finally并在对象上调用了Dispose。我的问题是如何处理Close方法。MSDN说它没有被调用,但我已经阅读了其他内容。我知道FileStream继承自Stream,这在here中有解释.现在说不要覆盖Close(),因为它是由Dispose()调用的。那么有些类是只在Dispose()方法中调用Close()还是在using中调用Close()?
与数据库连接对象一起使用时,using语句是否真的调用了close方法?TheMSDNdocumentation说它确保调用Dispose方法但没有提到关闭。我在StackOverflow上看到有人说它可以同时做到这两点。是否有人从Microsoft或其他确凿的证据中以某种方式给出了具体的答案? 最佳答案 这是SqlConnection类的“Dispose”方法:protectedoverridevoidDispose(booldisposing){if(disposing){this._userConnectionOptions=
在处置对象上调用方法是否合法?如果是,为什么?在下面的演示程序中,我有一个一次性类A(它实现了IDisposable接口(interface))。据我所知,如果我将一次性对象传递给using()构造,然后在右括号处自动调用Dispose()方法:Aa=newA();using(a){//...}//如果正确,请解释这个程序的输出:publicclassA:IDisposable{inti=100;publicvoidDispose(){Console.WriteLine("Dispose()called");}publicvoidf(){Console.WriteLine("{0}",
我有一个方法,里面有一个try/catch/finalyblock。在tryblock中,我声明SqlDataReader如下:SqlDataReaderaReader=null;aReader=aCommand.ExecuteReader();在finallyblock中,手动处理的对象是那些在类级别设置的对象。那么实现IDisposable的方法中的对象,比如上面的SqlDataReader,它们会被自动释放吗?Close()在while循环执行后调用aReader以获取阅读器的内容(应该是Dispose(),因为调用关闭())。如果没有调用Close(),该对象是否会在方法完成或
我在我们的项目中使用静态代码分析来检查代码违规情况。广泛使用的规则之一是CA2213,它检查一次性字段的正确处理。我注意到CA2213不检查自动实现属性的处理。此外,如果类继承自实现IDisposable的类且未重写Dispose方法,则CA2213既不检查字段也不检查自动实现的属性的处置。实例:publicsealedclassGood:IDisposable{privateFontfont;publicFontFont{get{returnfont;}set{font=value;}}publicGood(){font=newFont("Arial",9);}publicvoidD
假设我已经编写了一个实现IEnumerable的类,并返回一个IEnumerator,它不仅仅是IDisposable的枚举器,但是在完成枚举后,由于拥有它需要Dispose()的托管资源,我是否可以相信只要我的枚举器正确,以下将Dispose()这些托管资源在其IDisposable实现中处理这些托管资源?return(newMyClass()).Select(x=>x);编辑:这个问题看起来与标记为类似它的一个模组相似,但它在语义上是不同的IMO(我在提出问题之前看到了它) 最佳答案 是的,您可以从LINQ方法内部对迭代器调用D
我正在尝试将代码从Thread替换为Task。sleep/延迟仅代表长时间运行的事件。staticvoidMain(string[]args){ThreadDoWork();TaskDoWork();}publicstaticvoidThreadDoWork(){using(vardispose=newThreadDispose()){dispose.RunAsync();}}publicstaticasyncvoidTaskDoWork(){using(vardispose=newTaskDispose()){awaitdispose.RunAsync();}}publicclass
HttpWebReponse实现了IDisposable接口(interface),但是为什么没有Dispose方法。它只包含Close方法。using模式是否仍可用于此类? 最佳答案 HttpWebResponseimplementsIDisposable接口(interface)显式。因此,只有当您将HttpWebResponse转换为IDisposable时,您才能调用Dispose。HttpWebResponse的Close方法在内部调用Dispose。HttpWebResponseresponse=//assignedfr
想发布这个,即使我在写问题时想通了。将在下面发布答案。使用VS代码分析获取以下警告:WarningCA2213'DBConn'containsfield'DBConn.k__BackingField'thatisofIDisposabletype:'SqlConnection'.ChangetheDisposemethodon'DBConn'tocallDisposeorCloseonthisfield.但是我的代码确实在DBConn属性上调用了Dispose()。它不在后台吗?我还有其他类似的实例-我正在处理编译器不会抛出此警告的地方。这是下面的代码:usingSystem;usin
我一直在阅读.NET线程,并且正在编写一些使用ManualResetEvent的代码.我在互联网上找到了很多代码示例。但是,在阅读WaitHandle的文档时,我看到了以下内容:WaitHandleimplementstheDisposepattern.SeeImplementingFinalizeandDisposetoCleanUpUnmanagedResources.似乎没有一个示例在它们创建的ManualResetEvent对象上调用.Close(),即使是漂亮的RecursionandConcurrency来自pfxteam博客的文章(编辑-这有一个我错过的usingbloc