public class test
    {
        public Stream sam;
    }像上面定义了这个test类,Stream类型的sam作为成员,例如new test后,我将把test类作为参数出入别的函数内,那里面的Stream的Close问题将怎么解决呢?
3Q

解决方案 »

  1.   

    public abstract class Stream 基类
    通过继承由派生类实现其抽象方法 
    Stream s = new MemoryStream();s.Close();
      

  2.   

    我不是说继承问题,我是说public Stream sam作为类的成员,
    而这个类将作为函数的参数传入函数里面,这个sam的close要在哪些写比较好呢?
      

  3.   

    我的意思是,要是在调用时刚好没写close函数的话,需要在定义test
    函数里写析构函数吗?
      

  4.   

    我的意思是,要是在调用时刚好没写close函数的话,需要在定义test
    里写析构函数吗?
      

  5.   

    写在析构函数中,一个标准的做法就是实现IDispose接口,并提供析构函数,这样如果外面调用了Dispose,则可以关闭,忘记的话,在垃圾回收的时候执行析构函数也可以回收,例如:public class test:IDisposable
    {
        public Stream sam;    #region IDisposable 成员    public void Dispose()
        {
            if (sam == null) return;
            sam.Close();
            sam = null;
        }    ~test()
        {
            Dispose();
        }    #endregion
    }
      

  6.   

    Stream这种东西就是一次性的用品,弄成成员变量实在是有点那个..........C#中的析构函数没有按规则办事的习惯,最好别指望析构函数去为你做一些重要的事情.
      

  7.   

    5 楼的答案是正确的。任何包含有非托管资源的类型,都应实现 IDisposable 接口。
    这意味着,该类型的使用者有责任调用 Dispose 方法来显示释放非托管资源。