C# 带嵌套构造函数的CA2000

C# 带嵌套构造函数的CA2000,c#,.net,visual-studio-2010,code-analysis,C#,.net,Visual Studio 2010,Code Analysis,再一次警告我CA2000 以下代码生成CA2000警告: // Use an emulated GPS device nmeaInterpreter.Start(new VirtualDevice(new NmeaEmulator())); 出现以下警告: CA2000 : Microsoft.Reliability : In method 'GpsService.Start()', call System.IDisposable.Dispose on object 'new NmeaEmul

再一次警告我CA2000

以下代码生成CA2000警告:

// Use an emulated GPS device
nmeaInterpreter.Start(new VirtualDevice(new NmeaEmulator()));
出现以下警告:

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#是否在引擎盖下创建了一个我需要处理的临时对象

C#是否在引擎盖下创建了一个我需要处理的临时对象

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

在调用构造函数时创建这样的嵌套对象有点危险,因为如果其中一个对象的构造失败,将无法确保嵌套对象得到正确处理


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

什么是
VirtualDevice
?什么是构造函数签名?