C# 创建另一个类使用的一次性

C# 创建另一个类使用的一次性,c#,code-analysis,dispose,C#,Code Analysis,Dispose,我有一个一次性的连接类 public class Connection : IDisposable { ... } 以及一个依赖于它的类 public class UsesConnection : IDisposable { UsesConnection (Connection c) {...} public void Dispose() { c.Dispose(); ... } ... } 如何创建并返回UsesConnection类,而不出现CA2000错

我有一个一次性的连接类

public class Connection : IDisposable { ... }
以及一个依赖于它的类

public class UsesConnection : IDisposable {
  UsesConnection (Connection c) {...}
  public void Dispose() {
    c.Dispose();
    ...
  }
  ...
}
如何创建并返回
UsesConnection
类,而不出现
CA2000
错误

下面的代码在
c=newconnection()行上获得一个
CA2000
错误


改用
块使用

using (var c = new Connection())
using (var u = new UsesConnection(c))
{
   // Do your work here
}
但不要
返回
,因为这将处理这两个对象。不要让
使用连接处理
连接


你应该负责维护你的一次性参考资料的生命周期,而不是一些打电话的人-问问自己“如果他们从来没有处理过我的物品怎么办?”

但他正在返回
u
,所以我认为这是行不通的?仔细看后,我同意这一点
UsesConnection
不“拥有”传递给它的
连接
实例,因此它不应该对其进行任何处理。抑制可能仍然是让代码分析接受这一点的正确答案,但不是因为我在上一个答案中所述的原因。在仔细考虑了您所说内容的含义后,您似乎提出了以下两点之一:1)每次需要时创建一个连接,然后进行处理(昂贵),或者2)在调用堆栈的“更高层”创建连接,并延长连接的寿命。你推荐哪一种?只要你需要,我会一直留着。堆栈中较高的位置可能最有意义。您真的希望连接在UsesConnection之外创建,但与它一起释放吗?我会很好地定义所有权。A创建一个对象并负责处理它。我建议阅读“何时抑制警告”一节:“不要抑制来自此规则的警告,除非您在对象上调用了调用dispose的方法,例如Close,或者引发警告的方法返回IDisposable对象包装了您的对象。”您的案例被明确提到,您可以忽略/抑制该警告。。。
using (var c = new Connection())
using (var u = new UsesConnection(c))
{
   // Do your work here
}