【发布时间】:2020-03-08 02:57:49
【问题描述】:
我正在编写一个包含套接字操作的类库。我不想依赖消费者在完成后或抛出异常时处理资源。
通常我会使用“using”语句,但这在本地范围之外不起作用。就我而言,我正在上课并且在许多公共方法中使用 Socket。连接结束时很容易处理 Socket,但是在没有“使用”块的情况下抛出异常时如何处理呢?
这是我想出的: 基本上,我用 try catch 块封装了用户可以访问的每个方法。如果发生异常,我会在向用户抛出异常之前处理资源。
但我想知道是否有更好的选择。如果我对图书馆消费者隐藏这种自动处置是不好的。
public class Foo
{
Socket _socket;
public void method1()
{
try
{
// some work with _socket
}
catch
{
_socket.Dispose();
throw;
}
}
}
【问题讨论】:
-
是的,您应该依靠您的消费者来处理它。您可以通过让您的类自己实现 IDisposable 来向您的消费者发出信号。如果他没有处理你的对象,这会给你的消费者一个警告,假设他正在使用 FxCop 或类似的工具
标签: c# dispose idisposable using-statement