jjzjj

idisposable-cheat-sheet

全部标签

c# - 隐式转换为 'System.IDisposable' 错误

这就是我想要做的:privateKinectAudioSourceCreateAudioSource(){varsource=KinectSensor.KinectSensors[0].AudioSource;source.NoiseSuppression=_isNoiseSuppressionOn;source.AutomaticGainControlEnabled=_isAutomaticGainOn;returnsource;}privateobjectlockObj=newobject();privatevoidRecordKinectAudio(){lock(lockObj)

c# - 在 try catch block 中对 IDisposable 使用 block 是否有任何问题?

MSDNrecommends将实现IDisposable的类的任何实例化放入usingblock中。或者,如果它在try-catchblock中被实例化,则在Finally中执行Dispose。像这样在try-catchblock中使用usingblock有什么问题吗?try{using(Foobar=newFoo()){bar.doStuff();}}catch(Exceptione){//vomite}当然,我可以在Finallyblock中调用Dispose,但我是编程新手,我只是想知道是否做这样的事情这实际上是可以接受的,或者如果有人会拍打我的后脑勺并对我大喊我Doing-It

c# - 确定 IDisposable 是否应该扩展接口(interface)或在实现所述接口(interface)的类上实现

我如何确定是应该使用IDisposable扩展我的接口(interface)之一还是在实现我的接口(interface)的类上实现IDisposable?我有一个不需要处理任何外部资源的接口(interface),除了一个特定的实现。我的选择似乎是:1)在要求所有实现都实现Dispose的接口(interface)上实现IDisposable,即使只是一个空方法。-或-2)仅在具有需要处理的资源的类上实现IDisposable。这将导致“使用”问题,因为我的对象是从工厂创建的,因此所有上游代码都针对接口(interface)工作。由于该接口(interface)未绑定(bind)IDi

c# - 在哪里调用在构造函数中创建的 IDisposable 的 Dispose()?

在何处为对象拥有的IDisposable对象调用Dispose()?publicclassMyClass{publicMyClass(){log=newEventLog{Source="MyLogSource",Log="MyLog"};FileStreamstream=File.Open("MyFile.txt",FileMode.OpenOrCreate);}privatereadonlyEventLoglog;privatereadonlyFileStreamstream;//Othermembers,usingthefieldsabove}我应该实现Finalize()吗?对于

c# - 结构和 IDisposable

我想知道为什么它不能编译?publicstaticvoidMain(string[]args){using(MyStructsss=newMyStruct()){sss.s="fsdfd";//Cannotmodifymembersof'sss'becauseitisa'usingvariable'//sss.Set(12);//butit'sok}}publicstructMyStruct:IDisposable{publicintn;publicstrings;publicvoidSet(intn){this.n=n;}publicvoidDispose(){Console.Wri

c# - IDisposable 的显式实现

虽然在SO上可以找到很多关于IDisposable的问答,但我还没有找到答案:我通常遵循的做法是,当我的一个类拥有一个IDisposable对象时,它也会实现IDisposable并在拥有的对象上调用Dispose目的。但是最近我遇到了一个显式实现了IDisposable的类,从而阻止我直接调用Dispose强制我强制转换它,我觉得这很烦人而且没有必要。那么问题来了:为什么以及何时要使用IDisposable的显式接口(interface)实现?我知道显式实现接口(interface)有非常好的和正当的理由,但关于IDisposable的原因对我来说不是很清楚。

c# - IDisposable 在方法中创建并返回

我很高兴编写了一个运行良好且在运行时不会出现任何异常的项目。所以我决定运行静态代码分析工具(我使用的是VisualStudio2010)。结果发现违反了规则CA2000,消息如下:警告-CA2000:Microsoft.Reliability:在方法“Bar.getDefaultFoo()”中,在对对象“newFoo()”的所有引用超出范围之前调用System.IDisposable.Dispose。引用的代码是这样的:privatestaticIFoogetDefaultFoo(){return(Baz.canIDoIt())?newFoo():null;}我自己想:也许条件表达式破

c# - 应该级联应用 IDisposable 吗?

这是一个相当基本的问题,但我仍在努力解决这个问题。IDisposable被实现,当你想让一个对象的用户在对象最终被垃圾收集之前释放底层资源(例如套接字等)。当我有一个包含DbConnection(实现IDisposable)的类时,我的类是否也需要实现IDisposable并链接调用到DbConnection或它拥有的任何其他IDisposable对象?否则,DbConnections资源只会在我的类被垃圾回收时释放,从而丢弃它对连接的引用,GC将最终确定DbConnection。 最佳答案 是的,如果您控制一次性对象,您总是实现I

c# - 实现 IDisposable - 一次性字段与一次性属性

我在我当前的一个项目上运行VS2013的代码分析,遇到了“CA1001:拥有一次性字段的类型应该是一次性的。”生成警告的一个简单示例(假设DisposableClass实现了IDisposable)是:classHasDisposableClassField{privateDisposableClassdisposableClass;}但是,将字段变量转换为属性不再生成警告,即使该属性将由类实例化也是如此:classHasDisposableClassProperty{privateDisposableClassdisposableClass{get;set;}publicHasDis

c# - IDisposable 实现 - 'if (disposing)' 中应该包含什么

我一直在修复winforms应用程序中的一些内存泄漏问题,并注意到一些未明确处理的一次性对象(开发人员尚未调用Dispose方法)。Finalize方法的实现也无济于事,因为它没有进入if(disposing)子句。所有的静态事件注销和集合清除都放在了if(disposing)子句中。如果对象是一次性的,最好的做法是调用Dispose,但不幸的是,这种情况有时会发生如果有非托管对象、静态事件处理程序和一些托管集合需要在处置时清除。if(disposing)子句如何决定什么进什么出。Disposemethod.//Dispose(booldisposing)executesintwodi