2011-08-16 62 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

覆蓋處置方法,在那裏你可以使其爲空