假设您有一个提供提供接受需要清除的对象的方法的库。例如。通过调用其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);
}
最佳答案
我想说的是,正常的“所有权”是给创建资源的人的-因此,方法的调用者。除了别的,还有谁要说呼叫者想在阅读后处理流?也许他们想倒带并将其传递给其他对象。
我通常会厌倦处理未明确创建的任何内容。当然有例外-Bitmap(Stream)
构造函数有效地获取了流的所有权,并假定您将处置位图,而位图又将处置该流...但是我要说的是,这是个例外比规则。