我自己定义了一个类,里面声明了一个串口
public class Sockets_control
    {
        public static SerialPort com_socket;
        public Sockets_control(string com_name)
        {
            com_socket=new SerialPort(com_name, 1200, Parity.None, 8, StopBits.One);
            com_socket.Open();//串口在初始化的时候就打开了
        }
        public ~Sockets_control()//这里的析构函数怎么调用
        {
            com_socket.Close();
        }
     }后面调用这个类:
private void Read_sockets()
        {
            Sockets_control.Sockets_control socketsControl =new Sockets_control.Sockets_control("COM4");//声明了一个实例由于我在定时器里不停的调用Read_sockets()函数,结果前一次没有关串口,下次会再次打开串口,报错
private void timer1_Tick(object sender, EventArgs e)
       {
           Read_sockets();
       //这里该怎么调用析构函数呢?或者有没有其他办法,在每次定时调用之后,关掉串口
       }

解决方案 »

  1.   

    .net没有析构函数,你可以在重写Dispose方法释放连接:        protected override void Dispose (bool disposing)
            {
                com_socket.Close();
            }然后调用Dispose方法就可以了
      

  2.   

    C#的内存是CLR管理的,无法手工释放内存,靠的是垃圾回收机制,而垃圾回收的时间不是固定的,也就是说你无法确切地知道什么时候,GC执行。所以这与我们知道的析构函数在调用时立即释放内存是完全不一样的机制,所以说c#没有析构函数一说。
      

  3.   

    er...有析构函数。但推荐是实现IDispose接口,重写Dispose方法。