首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有嵌套构造函数的CA2000

具有嵌套构造函数的CA2000
EN

Stack Overflow用户
提问于 2012-05-22 18:35:14
回答 1查看 387关注 0票数 3

再给我一次CA2000警告。

下面的代码生成CA2000警告:

代码语言:javascript
复制
// Use an emulated GPS device
nmeaInterpreter.Start(new VirtualDevice(new NmeaEmulator()));

出现以下警告:

代码语言:javascript
复制
CA2000 : Microsoft.Reliability : In method 'GpsService.Start()', call System.IDisposable.Dispose on object 'new NmeaEmulator()' before all references to it are out of scope.

我已经检查了微软关于CA2000的文档,但找不到一个很好的例子来说明如何处理嵌套构造函数。显然,我不想自己存储对仿真器的引用。我希望只将引用传递给构造函数。

C#是否在幕后创建了一个我需要处理的临时对象?

EN

回答 1

Stack Overflow用户

发布于 2012-05-22 18:41:45

是不是C#在幕后创建了一个我需要处理的临时对象?

是的,每当您使用new操作符时,都会创建一个新对象。通常,您可以依赖垃圾回收器来为您处理这类事情,但是CA2000会提醒您,您创建的对象实现了IDisposable接口,因此您应该调用Dispose方法,以确保它使用的任何非托管资源都得到正确释放。

像这样在调用构造函数中创建嵌套对象有点危险,as the documentation describes,因为如果其中一个对象的构造失败,将无法确保嵌套对象被正确释放。

我真的不确定你为什么一开始就使用这个模式。VirtualDevice类应该单独负责管理它创建的对象的生存期。GpsService.Start()方法应该做的(或知道的!)是创建一个VirtualDevice对象。反过来,该对象应该创建它需要的任何嵌套对象,然后它可以确保正确地释放这些对象。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10700319

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档