传递给另一个对象时,谁应该对IDisposable对象调用Dispose?
Dispose()
在将一次性对象传递到另一个对象的方法或构造函数中后,谁应该调用这些对象,是否有任何指导或最佳做法?
这里有一些关于我的意思的例子。
IDisposable对象被传递到方法中(完成后是否应将其处置?):
public void DoStuff(IDisposable disposableObj){
// Do something with disposableObj
CalculateSomething(disposableObj)
disposableObj.Dispose();
}
IDisposable对象被传递到方法中并保留引用(在处理时是否应将其处理MyClass
?):
public class MyClass : IDisposable{
private IDisposable _disposableObj = null;
public void DoStuff(IDisposable disposableObj)
{
_disposableObj = disposableObj;
}
public void Dispose()
{
_disposableObj.Dispose();
}
}
我目前认为在第一个例子中, 呼叫者
的DoStuff()
,因为它可能创建的对象应该处理的对象。但是在第二个示例中,感觉就像MyClass
应该处理该对象,因为它保留了对它的引用。这样做的问题在于,调用类可能不知道MyClass
保留了引用,因此可能决定MyClass
在使用完该对象之前决定处置该对象。对于这种情况有任何标准规则吗?如果有,当将一次性对象传递给构造函数时,它们是否有所不同?
回答:
一般规则是,如果您创建(或获得了)对象的所有权,则有责任处置它。这意味着,如果您在方法或构造函数中收到一次性对象作为参数,则通常不应处置它。
请注意,.NET框架中的某些类 确实会 处置它们作为参数接收的对象。例如,StreamReader
配置a 也配置基础Stream
。
以上是 传递给另一个对象时,谁应该对IDisposable对象调用Dispose? 的全部内容, 来源链接: utcz.com/qa/403888.html