传递给另一个对象时,谁应该对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

回到顶部