C# 带嵌套构造函数的CA2000
再一次警告我CA2000 以下代码生成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
// 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
?什么是构造函数签名?