我有一个类,其中套接字被定义为成员对象。 我是否需要.Close()套接字,如果我想销毁这个类的对象(设置为null)
答案 0 :(得分:2)
简而言之,是的。
理想情况下,您的类将实现应关闭套接字的IDisposable
。不这样做意味着套接字对象可以在内存中持久存在,直到垃圾收集器获取它为止。如果您计划重新连接到相同的端点,否则底层Windows库将抛出异常; (特别是错误10056:在已连接的套接字上发出了连接请求。)
答案 1 :(得分:1)
您好我认为您来自C ++中的C ++关闭方法调用后面的dispose方法。关闭后,您不必做任何事情。该对象将被处理,稍后将从GC设置为空。
但如果您的班级中有一个套接字作为成员,则必须应用Dispose模式!
只需将你的套接字置于你创建的类的dispose方法中,参见链接。
public class DisposableResourceHolder : IDisposable {
private Socket socket; // handle to a resource
public DisposableResourceHolder(){
this.socket= ... // allocates the resource
}
public void Dispose(){
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing){
if (disposing){
if (socket!= null) socket.Dispose(); // HERE DISPOSE
}
}
}
如果这样可以解决您的问题,请将此标记为答案!
由于