假设您有一个库,它提供了一个接受需要清理的对象的方法.例如,通过调用其Close或Dispose方法.谁应该负责?来电者还是被叫者?当然,只要您正确记录,您就可以选择任何一种方式.但对此有共识或最佳实践吗?
这是一个例子:
// public method of library
public class MyObject
{
public void Read(System.IO.Stream stream)
{
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果调用者负责,客户端代码应如下所示:
using (FileStream file = new FileStream(...))
{
MyObject myObject = new MyObject();
myObject.Read(file);
}
Run Code Online (Sandbox Code Playgroud)
我会说正常的 "所有权"是为了创建资源的人 - 所以你的方法的调用者.除了其他任何事情之外,谁会说调用者想要在阅读后处理流?也许他们想要倒回它并将其传递给别的东西.
我一般都对处理我没有明确创建的任何事情感到紧张.当然有一些例外 - Bitmap(Stream)构造函数有效地获取了流的所有权,并假设您将处置位图,而位图又会处理流...但我会说这是例外而不是规则.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |