Pau*_*aul 5 c# idisposable resource-management
interface IMyInterace
{
void Open();
object Read();
void Close();
}
class MyImplementation : IMyInterface
{
public void Open() { /* instantiates disposible class */ }
//...
public void Close() { /* calls .Dispose(); */ }
}
Run Code Online (Sandbox Code Playgroud)
有没有一种很好的方法来处理这种情况,以确保调用类中的可处理实例?(除了文档之外,调用者没有信号他们必须调用'Close'.)IMyInterface的实现不一定封装IDisposible实例,并且在整个应用程序的生命周期内重复关闭和重新打开.
我在想这样做:
IMyInterface的用户不知道他们正在使用什么实现,所以我不确定MyImplementation可处置的价值有多少,而且并非所有实现都会封装IDisposibles.
除了这里已有的答案之外:
如果这个类(经常/有时)单独通过接口使用,我建议从 IDisposable 继承 IMyInterace。
这将使您的用户以一致的方式使用这些对象。当然,缺点是您可能需要向实际上不需要它的类添加(虚拟)Dispose 方法。但好处在于一致性和灵活性:如果将来某个类发生变化而需要 Dispose() 该怎么办?
一个最小的方法:
interface IMyInterace : IDisposable { }
sealed class MyImplementation : IMyInterface
{
public void Open() { /* instantiates disposible class */ }
public void Close() { /* calls _myField.Dispose(); */ }
public void Dispose() { Close(); } // only use this short form in a sealed class
}
Run Code Online (Sandbox Code Playgroud)