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
}