草庐IT

idisposable

全部标签

c# - CA1001 在异步方法上实现 IDisposable

考虑以下代码:publicclassTest{publicasyncTaskDo(){awaitTask.Delay(200);using(vardisposable=newDisposable()){disposable.Do();}}}publicclassDisposable:IDisposable{publicvoidDo(){}publicvoidDispose(){}}当我在VisualStudio中运行代码分析时,我收到一条警告:WarningCA1001ImplementIDisposableonTest.d__0becauseitcreatesmembersofthe

c# - 我什么时候应该实现 IDisposable?

这个问题在这里已经有了答案:ProperuseoftheIDisposableinterface(19个回答)关闭5年前。何时实现IDisposable的最佳实践是什么?如果您在类中有一个托管对象,那是实现它的最佳经验法则,还是取决于该对象是在类中创建的还是刚刚传入的?我是否也应该为根本没有托管对象的类执行此操作?

c# - 代码分析 CA1063 在从 IDisposable 派生并在基类中提供实现时触发

我有一些代码会触发代码分析警告CA1063:CA1063:Microsoft.Design:RemoveIDisposablefromthelistofinterfacesimplementedby'Functionality'andoverridethebaseclassDisposeimplementationinstead.但是,我不确定我需要做什么来修复这个警告。简而言之,我有一个派生自IDisposable的接口(interface)IFunctionality。类Functionality实现了IFunctionality但派生自类Reusable以便能够重用som代码。R

c# - 在返回 IEnumerable<T> 的方法中使用 IDisposable 对象

假设您有一个内部使用IDisposable对象(例如流读取器)的方法,并且yield返回从文件中读取的项目。像这样:publicIEnumerableRead(stringfilename){using(varfilestream=newFileStream(filename,FileMode.Open)){using(varreader=newStreamReader(filestream)){stringline;while((line=reader.ReadLine())!=null){yieldreturnnewYourObject(line);}}}}当我使用不迭代完整集合的

c# - Unity 2.0 和处理 IDisposable 类型(尤其是使用 PerThreadLifetimeManager)

我知道类似的问题被问过好几次(例如:here、here、here和here),但它是针对以前版本的Unity,答案取决于使用的LifetimeManager类。文档说:UnityusesspecifictypesthatinheritfromtheLifetimeManagerbaseclass(collectivelyreferredtoaslifetimemanagers)tocontrolhowitstoresreferencestoobjectinstancesandhowthecontainerdisposesoftheseinstances.好的,听起来不错,所以我决定检查

c# - 处理 .NET IDisposable 对象

我在C#中工作,我一直很松懈地使用usingblock来声明实现IDisposable的对象,而您显然总是应该这样做。但是,我没有看到一种简单的方法来知道我什么时候滑倒了。VisualStudio似乎没有以任何方式表明这一点(我只是错过了什么吗?)。我是否应该在每次声明任何内容时都检查帮助,并逐渐建立一个百科全书式的内存,哪些对象是一次性的,哪些不是一次性的?似乎没有必要、痛苦且容易出错。您如何处理这个问题?编辑:查看相关问题侧边栏,我发现anotherquestion这清楚地表明Dispose()无论如何都应该由对象的终结器调用。所以即使你从来没有自己调用它,它最终也会发生,这意味着

c# - 为类或接口(interface)声明 IDisposable?

从以下情况开始:publicinterfaceISample{}publicclassSampleA:ISample{//hassome(unmanaged)resourcesthatneedstobedisposed}publicclassSampleB:ISample{//hasnoresourcesthatneedstobedisposed}类SampleA应该实现IDisposable接口(interface)来释放资源。您可以通过两种方式解决此问题:1。将需要的接口(interface)添加到类SampleA中:publicclassSampleA:ISample,IDisp

c# - 使用语句与 IDisposable.Dispose()

据我了解,usingstatement在.NET中,一旦代码退出block,就会调用IDisposable对象的Dispose()方法。using语句还做其他事情吗?如果不是,那么以下两个代码示例似乎实现了完全相同的事情:UsingConasNewConnection()Con.Open()'dowhatever'EndUsingDimConasNewConnection()Con.Open()'dowhatever'Con.Dispose()谁确认我是对的,谁指出我错了并说明原因,我将给出最佳答案。请记住,我知道某些类可以在它们的Dispose()方法中做不同的事情。这个问题是关于u

c# - 您是否应该实现 IDisposable.Dispose() 以使其永远不会抛出?

对于C++中的等效机制(析构函数),建议是itshouldusuallynotthrowanyexceptions.这主要是因为这样做可能会终止您的进程,这很少是一个好策略。在.NET中的等效场景中......抛出第一个异常finallyblock作为第一个异常的结果执行finallyblock调用Dispose()方法Dispose()方法抛出第二个异常...您的进程不会立即终止。但是,您会丢失信息,因为.NET粗暴地将第一个异常替换为第二个异常。因此,调用堆栈上方某处的catchblock永远不会看到第一个异常。但是,人们通常对第一个异常更感兴趣,因为它通常会提供更好的线索,说明为

c# - 析构函数与 IDisposable?

我读过有关在C#中处理对象/IDisposable接口(interface)和析构函数的信息,但对我来说它们似乎做同样的事情?两者有什么区别?为什么我要用一个而不是另一个?事实上,在这个例子中(下面的链接)这段代码同时使用了IDisposable接口(interface)和析构函数:http://msdn.microsoft.com/en-us/library/system.idisposable.aspx评论说析构函数是如果不使用终结代码,但我如何决定何时使用一个而不是另一个? 最佳答案 我写了一篇相当深入的文章,应该有助于解释终