c# - 关于清除责任的 API 设计困境

标签 c# api

假设您有一个库,它提供了一种方法来接受需要清理的对象。例如。通过调用其 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/

相关文章:

php - api的Laravel多路由文件

api - Shopify Order API 中是否公开了订单项属性?

c# - ASP.NET 4 日历控件不显示 SelectedDate

c# - 比较两个列表并删除相同列表的最有效方法

php - API 调用限制为 500 个结果 - 如何迭代以获取所有结果?

c++ - c++ 中将 SID 转换为帐户用户名的最佳函数是哪个?

git - 为新存储库创建初始 wiki

c# - 具有多个文件的 CopyFileEx,但只有一个复制对话框

c# - 将具有不同关系值的表转换为 Excel 列

c# - 当 ComboBox ItemsSource 更改时,WPF Combobox 更新但不显示显示