假设您有一个库,它提供了一种方法来接受需要清理的对象。例如。通过调用其 Close 或 Dispose 方法。谁应该负责?调用者还是被调用者?当然,只要您正确记录了这一点,您就可以选择任何一种方式。但对此是否有共识或最佳实践?
这是一个例子:
// public method of library
public class MyObject
{
public void Read(System.IO.Stream stream)
{
...
}
...
}
如果调用者负责,则客户端代码应如下所示:
using (FileStream file = new FileStream(...))
{
MyObject myObject = new MyObject();
myObject.Read(file);
}
最佳答案
我会说,正常“所有权”属于创建资源的任何人 - 因此是您的方法的调用者。撇开其他不谈,谁能说调用方想要在读取后处理流?也许他们想倒带它并将其传递给其他东西。
我通常对处理任何我没有明确创建的东西感到紧张。当然也有异常(exception)——Bitmap(Stream)
构造函数有效地获取了流的所有权,并假定您将处理位图,位图又将处理流...但是我会说这是异常(exception)而不是规则。
关于c# - 关于清除责任的 API 设计困境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966808/