2011-08-16 93 views
0

的Class1:处置例如

 public class FunctionBlocks 
     { 
      List<Hashtable> _htLogicalNodeList; 
      public FunctionBlocks() 
      { 
      _htLogicalNodeList = new List<Hashtable>(); 
      FunctionBlock fb = new FunctionBlock(); 
      fb.AddDODASignalList(new Hashtable);    
      _htLogicalNodeList.Add(fb.LogicalNodeHash);  
      fb = null; 
      }  
     } 

等级2:

 public class FunctionBlock 
     { 
     Hashtable _htLogicalNode; 

     public FunctionBlock() 
     { 
      _htLogicalNode = new Hashtable(); 
     } 

     public Hashtable LogicalNodeHash 
     { 
      get{return _htLogicalNode;} 
      set{_htLogicalNode = value;} 
     } 

     public void AddDODASignalList(Hashtable doDASignal) 
     { 
      _htLogicalNode.Add(doDASignal); 
     } 
    } 

在这个例子中,我wan't处置 “_htLogicalNode”。 “fb”对象我已将它设置为null,Eventhough“FunctionBlocks”实例具有“_htLogicalNode”引用。我如何处置“_htLogicalNode”实例。

回答

0

你是什么意思的“处置”?你可以有FunctionBlock实现IDisposable在这种情况下,你可以使用以下命令:

using (FunctionBlock fb = new FunctionBlock()) 
{ 
    fb.AddDODASignalList(new Hashtable);    
    _htLogicalNodeList.Add(fb.LogicalNodeHash);  
} 

不过,我看不到任何东西在FunctionBlock需要处置,所以这样做是毫无意义的 - 在IDisposable接口/模式基本上是只是当你完成一个对象时调用方法的一种奇特/可靠的方式。除非你在实施的Dispose方法中做了一些事情,否则这不会做任何事情。

如果通过“处置”你的意思是释放内存然后答案是你不需要做任何事(你甚至不需要设置fb为空)。只需让fb超出范围,垃圾收集器将收集它并在自己的时间释放已用内存。

您可能会发现fb所使用的内存没有立即释放 - 这是完全正常的和可以预料的。有很多方法可以迫使垃圾收集器在你想要的时候做“它的事情”,但是这样做是很糟糕的做法

0

覆盖处置方法,在那里你可以使其为空